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]); } } 运行效果如下:
|
|