將數組分爲有序區和無序區,開始時第一個元素就是有序區,與第二個元素比較,第一二元素排好序後,再將第三個元素與前2個元素比較插入到合適的位置。後面依次操做。shell
1 void insertSort(int num[],int l) { 2 3 int i,j,t; 4 for(i=1;i<l;i++) //i從1開始 5 for(j=0;j<i;j++){ //j每次都要從0開始,一直到等於i 6 if(num[j]>num[i]){ //i與前面的有序區進行比較再交換 7 t = num[j]; 8 num[j] = num[i]; 9 num[i] = t; 10 } 11 } 12 13 }
1 void shellSort(int num[],int l){ 2 3 int i,j; 4 int t; //臨時變量 5 int n; //i每次開始的下標 6 int k=(l/3)+1; //每次的增量 7 while(k>0){ //k>0就一直排序 8 for(n=0;n<k;n++) //在k變換的狀況下,n每次重置爲0 9 for(i=n+k;i<l;i+=k) //這兩個for循環就是直接插入排序,只不過每次增量爲k 10 for(j=n;j<=i;j+=k){ 11 if(num[j]>num[i]){ 12 t = num[i]; 13 num[i] = num[j]; 14 num[j] = t; 15 } 16 } 17 k--; //每次減少增量 18 } 19 }