希尔排序

希尔排序,主要就是通过一个步长来分割数组,如何步长是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 }

 

posted @ 2020-03-31 16:01  撑雨伞的小男孩  阅读(134)  评论(0编辑  收藏  举报