插入數據,有序數組仍然有序
方法一:
在一個數組中完成的操作
代碼實現:
/* 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]!='\0';i++) //a[i]!='\0'注意此形式的寫法 printf("%d\t",a[i]); printf("\n輸入要插入的數:"); scanf("%d",&num); sort(a,num); printf("新數組的表示形式:"); for(i=0;i<N;i++) printf("%d\t",a[i]); printf("\n"); 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("\n" ); for(i = 0; i < N; i++) { printf("%d\t",b[i]); } printf("\n" ); 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 ———————————————————————————————————————— 采用一個新的數組進行存儲 */