美文网首页
排序-希尔排序

排序-希尔排序

作者: Dsosy618 | 来源:发表于2017-06-04 02:43 被阅读0次

    希尔排序有时也被称为缩小增量排序.它的做法不是每次一个元素和下一个元素进行比较.而是一开始时使用较大的增量为间隔进行比较,然后增量缩小,直至增量缩小为1.

    希尔排序是基于插入排序的以下两点性质而改进的:

    • 插入排序对顺序杂乱度越低的数组操作时,效率越高.
    • 插入排序一般而言都是低效的,因为每次只能将数据移动一位.

    算法思路:

    • 取一个不大于数组长度 n 的正整数a1(a1 < n), 把全部的数据分为 a1个组(即所以距离为 a1倍数的数据为1组),然后再各组内进行插入排序.
    • 然后取 a2(a2 < a1)
    • 重复上述的操作, 直至 ai = 1(即所有的数据为1组), 最后对这组进行插入排序.一般而言, a1 = n/2, a2 = a1/2,....,ai = 1.
    double *ShellSort(double *a, int n){
        int i, j, Increment;
        double tmp;
    
        for(Increment = n/2; Increment > 0; Increment /= 2){
            for(i = Increment; i < n; i++){
                tmp = a[i];
                for (j = i; j >= Increment ; j -= Increment) {
                    if(tmp < a[j - Increment])
                        a[j] = a[j - Increment];
                    else
                        break;
                }
                a[j] = tmp;
            }
        }
        return a;
    }
    

    相关文章

      网友评论

          本文标题:排序-希尔排序

          本文链接:https://www.haomeiwen.com/subject/leqvfxtx.html