插入数据,有序数组仍然有序
方法一:
在一个数组中完成的操作
代码实现:
/* 2017年6月19日16:31:52 功能:向有序的数组中插入一个数据,但是数据仍然有序 */ #include<stdio.h> #define N 5 void sort(int a[],int num) { int i,j,temp1,temp2; int end = a[N-2]; //a[N-2]是原数组的最大一个数据 if(num >= end) //如果插入的数据比原数组中的最大数据还大则插入到数组最后面 a[N-1] = num; else //否则就是在数组的第一位置或者中间位置插入 { for(i = 0; i < N-1; i++) if(a[i] > num) //判断插入数值与数组中的元素的大小 { temp1 = a[i]; //先保存当前位置的值 a[i] = num; //插入数值 for(j = i+1; j < N; j++) //此处的for循环是对数据进行移位操作 { //以下三行将插入位置之后的数依次向后移动 temp2 = a[j]; a[j] = temp1; temp1 = temp2; } break; //找到合适的位置后就终止外层循环 } } } int main() { int a[N]={5,8,10,20}; int i=0; int num; printf("原数组的表示形式:"); for(i=0;a[i]!=' ';i++) //a[i]!=' '注意此形式的写法 printf("%d ",a[i]); printf(" 输入要插入的数:"); scanf("%d",&num); sort(a,num); printf("新数组的表示形式:"); for(i=0;i<N;i++) printf("%d ",a[i]); printf(" "); return 0; } /* 总结: 在VC++6.0中的显示结果: ---------------------------------------------------------------- 原数组的表示形式:5 8 10 20 输入要插入的数:15 新数组的表示形式:5 8 10 15 20 ---------------------------------------------------------------- 此方法是在一个数组中完成的移动操作 */
方法二:
在新的数组中存储,并且完成操作
代码实现:
/* 2017年6月19日15:03:14 功能:在有序的数组中插入一个数据之后,数组仍然是有序的 */ #include"stdio.h" #define N 10 #define M 9 int main() { int a[M] = {2,3,4,5,6,7,8,9,9}; int b[N]; int i, j, num; printf("please input a number: "); scanf("%d",&num); if(num < a[0]) //找出插入的数据在数组中的下标位置 { j = 0; } else if(num > a[M-1]) { j = M; } else { for(i = 0; i < M; i++) { if( num == a[i]) { j = i; } if( num > a[i]&& num < a[i+1]) { j = i + 1; } } } for( i = 0; i < N;i++) { if(i < j) { b[i] = a[i]; } if(i == j) { b[i] = num; } if(i > j) { b[i] = a[i-1]; } } printf("The new array is :"); printf(" " ); for(i = 0; i < N; i++) { printf("%d ",b[i]); } printf(" " ); return 0; } /* 总结: 在VC++6.0中显示的结果为: ———————————————————————————————————————— please input a number: 1 The new array is : 1 2 3 4 5 6 7 8 9 9 please input a number: 4 The new array is : 2 3 4 4 5 6 7 8 9 9 ———————————————————————————————————————— 采用一个新的数组进行存储 */