zoukankan      html  css  js  c++  java
  • (7)插入排序之五 希尔排序

          希尔排序(Shell’s Sort)又称“缩小增量排序”(Diminishing Increment Sort),它也是一种属于插入排序类的方法,但在时间效率上较前述几种排序方法有较大的改进。时间复杂度为O(n^3/2)理解:先将整个待排记录序列分割成为若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

    void CInsertionSort::ShellSort(void)
    {
    const int count = 9, length = count -1;
    int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49};
    const int t = 3;
    int dlta[t] = {3, 2 , 1};
    for (int k = 0; k < t; ++k)
    {
    ShellInsert(L, length, dlta[k]);
    }
    //打印排序结果。
    for (int i = 0; i <= length; ++ i)
    {
    cout
    << L[i] << "\t";
    }
    cout
    << endl;
    }


    void CInsertionSort::ShellInsert(int L[], int length, int dk)
    {
    for (int i = dk + 1; i <= length; ++ i)
    {
    if (L[i] < L[i - dk])
    {
    L[
    0] = L[i];
    int j = i - dk;
    while (j > 0 && L[0] < L[j])
    {
    L[j
    + dk] = L[j];
    j
    -= dk;
    }
    L[j
    + dk] = L[0];
    }
    }
    }

          和直接排序差不多,只不过是先三三比较,再两两比较,即第一轮[4]和[1]比较,[5]和[2],[6]和[3],[7]和[4],[8]和[5]。简单来说是这样来比较,复杂来说,这只是第一轮的第一次比较,如果符合条件还会进行第一轮的第二次比较。即for循环的while子循环。把数值代进来用大脑跑一下就OK了。

    1
  • 相关阅读:
    mysql中的内连接and 多表查询
    webdriver中的三大等待及窗口的切换
    postman断言
    postman数据驱动ddt
    postman环境变量和全局变量的使用
    postman 接口请求过程
    垃圾脑瘫的坑
    待填的坑
    CF185D
    CF235E 题解(转)
  • 原文地址:https://www.cnblogs.com/wanggary/p/2032202.html
Copyright © 2011-2022 走看看