2-插入排序之--希尔排序

策略:

分组插入

基本思想:

  1. 先取定一个小于n的整数d1作为第一个增量,把待排序数据分为d1个组,把所有距离为d1的数据元素放在同一个组中,在各组中进行直接插入排序

  2. 然后取第二个增量d2 (< d1)重复上述的分组和排序,直至所有增量dt = 1;即所有的记录放在同一个组中进行直接插入排序为止。

比如下面的例子:

2-插入排序之--希尔排序_第1张图片

代码如下:

void shellsort(int * a,int len)
{
    int i,j;
    
    int gap = len/2;//增量赋初值
    
    while (gap > 0) {
    
        //对所有相隔gap位置的所有元素进行排序
        for (i = gap; i < len; i++) {
            int tmp = a[i];
            j = i - gap;
            
            while (j >=0 && tmp < a[j]) {
                a[j+gap] = a[j];
                j = j - gap;
            }
            a[j+gap] = tmp;
            j = j- gap;
        }
    
        
        gap = gap /2; //减小增量
    }
}


你可能感兴趣的:(2-插入排序之--希尔排序)