zoukankan      html  css  js  c++  java
  • 数据结构-排序-shell排序

                  shell排序

    首先,希尔排序适用于待排序列关键有序。

    接下来一步步图解SHELL排序

    我为了方便理解内部操作。我先把代码输出整理下。

    #include<iostream>
    #include<vector>
    using namespace std;
    //同样第一个是哨兵,用来存放比较的内容。毕竟SHELL排序就是升级版的直接插入排序
    //含暂存单元的数组v
    int temp[]={0,20,17,36,98,14,23,83,13,28};
    vector<int>  v(begin(temp),end(temp));
    
    //打印数组
    inline void  printV(const vector<int> &v)
    {
        for(auto a:v)
            cout<<a<<" ";
        cout<<endl;
    }
    //shell排序
    void shell_sort(vector<int> &v)
    {
        cout<<"shell排序"<<endl;
        for(int d=v.size()/2;d>=1;d=d/2)//分割区间,直到区间=1
        {
            cout<<"循环1开始"<<endl;
            for(int i=d+1;i<v.size();i++)//第二个分区首部   分组后对组开始直接插入排序
            {
                cout<<"循环2开始"<<endl;
       cout<<"设置哨兵"<<endl; v[
    0]=v[i]; //以一分区尾部设置哨兵 int j; //设j=i-d j为一分区首部,假如当前有序组v[j]比无顺组中v[0]大,则开始直接插入排序 for(j=i-d;j>0&&v[0]<v[j];j=j-d) { cout<<"循环3开始"<<endl; printV(v); v[j+d]=v[j]; cout<<"循环3结束"<<endl; } //把哨兵插入j+d cout<<"哨兵插入"<<endl; v[j+d]=v[0]; printV(v); cout<<"循环2结束"<<endl; } cout<<"循环1结束"<<endl; } printV(v); } int main(int argc, char *argv[]) { printV(v); shell_sort(v); return 0; }

    我这里把每个步骤都打印了出来,运行就可以得到这种结果

    看看就知道每次操作了

    转载请标明出处
  • 相关阅读:
    python基础学习(九)
    python基础学习(八)
    python基础学习(七)
    python基础学习(六)
    python基础学习(五)
    python基础学习(四)
    python基础学习(三)
    mysql-binlog server的实现
    percona-toolkit常用工具
    Linux下如何快速定位系统瓶颈在哪里
  • 原文地址:https://www.cnblogs.com/DJC-BLOG/p/9068864.html
Copyright © 2011-2022 走看看