插入排序(希爾排序)

直接插入排序


將數組分爲有序區和無序區,開始時第一個元素就是有序區,與第二個元素比較,第一二元素排好序後,再將第三個元素與前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 }
相關文章
相關標籤/搜索