分享

创建有序数组(升序),采用边读入边插入

 BUPT-BYR 2010-12-08

 

17.创建有序数组(升序),采用边读入边插入

/*创建有序的数组(升序):读入N个整数(N=数组定义的大小,

 *为常量),要求用边读入边插入的方式将读入得数组逐个插入到

 *数组的合适位置中,使得插入后的数组也是按升序排列的数组。

 */

#include <stdio.h>

/*声明函数findPosition(int[],int,int,int),在升序排列

 *的数组中查找整数的插入位置,使得插入后的数组还是升序,

 *返回插入位置下标。

 */

int findPosition(int[],int,int,int);

/*声明函数insertElement(int[],int,int,int,int),往

 *-数组中指定位置插入一个整数。

 */

int insertElement(int[],int,int,int,int);

/*声明函数output(int[],int),打印一个数组*/

void output(int[],int);

main()

{

       /*arraySize定义数组大小,elementSize数组当前

        *的元素个数,element要插入的元素,position

        *插入元素的位置。

        */

       int arraySize=5,data[5],elementSize=0,element,position=0,i;

       printf("请输入%d个整数:",arraySize);

       /*逐个读取并插入元素*/

       for(i=1;i<=arraySize;i++)

       {

              if(i==1)

              {

                     scanf("%d",&data[0]);

                     elementSize+=1;

              }

              else

              {

                     scanf("%d",&element);

                     position=findPosition(data,arraySize,elementSize,element);

                     insertElement(data,arraySize,elementSize,position,element);

                     elementSize+=1;

              }

       }

       printf("升序排列的结果:");

       output(data,elementSize);

       printf("\n");

       return(0);

}

/*定义函数findPosition(int[],int,int,int),在升序排列

 *的数组中查找整数的插入位置,使得插入后的数组还是升序,

 *返回插入位置下标。

 */

int findPosition(int data[],int arraySize,int elementSize,int element)

{

       int i=0;

       /*数组当前元素个数少于定义的元素个数时可查找*/

       if(elementSize<arraySize)

       {

              /*用循环确定插入元素的下标*/

              while((i>=0)&&(i<=elementSize-1))

              {

                     if(element<=data[i])

                            return i;

                     else

                            i+=1;

              }

              return elementSize;

       }

       else

              return -1;

}

/*定义函数insertElement(int[],int,int,int,int),往

 *-数组中指定位置插入一个整数。

 */

int insertElement(int data[],int arraySize,int elementSize,int position,int element)

{

       int i;

       /*不符合条件时返回-1-2*/

       if(position>arraySize)

              return -1;

       else

       {

              if(elementSize>=arraySize)

                     return -2;

              else

              {

                     /*视情况插入整数*/

                     if(position==elementSize)

                            data[position]=element;

                     else

                     {

                            for(i=elementSize-1;i>=position;i--)

                                   data[i+1]=data[i];

                            data[position]=element;

                     }

                     return 1;

              }

       }

}

/*定义函数output(int[],int),打印一个数组*/

void output(int data[],int elementSize)

{

       int i;

       for(i=0;i<=elementSize-1;i++)

       {

              printf("%d\t",data[i]);

       }

}

运行效果如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多