希尔排序
希尔排序,主要就是通过一个步长来分割数组,如何步长是5,那么整个数组将分成5组。分组之后用插入排序。
1 void xier(int *array, int len) 2 { 3 int gap = len; 4 5 while(gap > 1) 6 {
//用除以3+1的方式据说是某位大牛算出来的最佳步长 7 gap = gap/3 + 1; 8 9 int temp; 10 int index; 11 for(int i = 0; i < gap; i++) 12 { 13 14 for(int j = i + gap; j < len; j+= gap) 15 {
//挖坑,取值 16 temp = array[j]; 17 index = j;
// 开始插入排序,注意:步长的因素,所以有序序列和无序序列的下标有所变化。 18 for(int k = j - gap; k >= 0; k -= gap) 19 { 20 if(temp < array[k]) 21 { 22 array[k+gap] = array[k]; 23 index = k; 24 } 25 else 26 { 27 break; 28 } 29 } 30 31 array[index] = temp; // 填坑 32 } 33 } 34 } 35 }