shell排序

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

接下来一步步图解SHELL排序

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

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

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

看看就知道每次操作了

数据结构-排序-shell排序的更多相关文章

  1. 数据结构学习——shell排序的C语言实现

    shell排序: 这个排序的命名是来自发明者的名字,和排序的方法没有字面上的联系.所以不要因为名字而感觉很难.在K&R的C程序设计语言中书中只用了几行代码很简洁的实现了这个排序算法.那就来看看 ...

  2. 数据结构之shell排序

    #SIZE  10        //直接插入排序     void insert_sort(){           int i,j;           int array[SIZE+1];   ...

  3. 快排,归并和Shell排序

    快速排序 快速排序的执行流程: (1) 先从数列中取出一个数作为基准数. (2) 将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. (3)再对左右区间重复第二步,直到各区间只有一个数. ...

  4. Shell排序算法和合并排序算法

    Shell排序(希尔排序)算法Shell排序严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序. Shell排序的流程:1.将由n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个 ...

  5. Shell排序 C&&C++

    Shell排序   Shell排序是大量数据需要排序时,更为高效的插入排序.它的算法思想基于插入排序的算法思想 流程: (1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等 ...

  6. 数据结构与算法之--高级排序:shell排序和快速排序

    高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...

  7. 数据结构 - 希尔排序(Shell&#39;s Sort) 具体解释 及 代码(C++)

    数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...

  8. 数据结构学习(shell排序和归并排序)

    # coding=utf-8 # shell排序 # 参数alist:被被排序的列表 def shellsort(alist): gap = len(alist) / 2 while gap > ...

  9. (2)Java数据结构--二叉树 -和排序算法实现

    === 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...

随机推荐

  1. JavaScript:直接写入 HTML 输出流

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. Extjs treePanel 的treestore重复加载问题解决

    在Extjs 4.2.2 中构建一个treePanel 发现设置rootVisible后 ,treeStore中设置的autoLoad:false不启作用,在组件初始化的时候即加载数据源,造成数据重复 ...

  3. 用c#语言编写分解质因数

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  4. SpringBoot非官方教程 | 第五篇:springboot整合 beatlsql

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot5-beatlsql/ 本文出自方志朋的博客 Be ...

  5. git使用过程的问题与解决办法

    一.什么是Git Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote ...

  6. SQL3120W 不能将xx的字段值转换成 INTEGER值

    一次用DB2 Load/Import导入数据时,报错,提示SQL3120W 不能将xx的字段值转换成 INTEGER值,但目标列不可为空.未装入该行. 目标表: CREATE TABLE TEST( ...

  7. xcode7--iOS开发---将app打包发布至app store

    时隔3个月再次接触应用打包,又是一顿折腾 说说这次的感受吧: 变得是打包时间减少到4小时(其中大部分时间还是xcode7或者是iOS9的原因),不变的是还是一如既往的坑!! 好了,废话不多说,下面讲讲 ...

  8. django写一个简单的登陆注册

    要写这个,前提还是需要知道三个知识: 一个是urls.py,它是写我们的路由关系的,之前我写了通过wsgiref写一个简单的服务端,也用到了路由,就是 请求过来的url和视图函数的对应关系. 二是就是 ...

  9. POJ 2318--TOYS(二分找点,叉积判断方向)

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17974   Accepted: 8539 Description ...

  10. 【杂题总汇】HDU-5215 Cycle

    ◆HDU-5215◆ Cycle 国庆节集训的第三天……讲图论,心情愉快……刷了一堆水题,不过也刷了一些有意思的题 +传送门+ HDU ▶ 题目 给出一个无向图(无自环,无重边),求该无向图中是否存在 ...