数据结构-排序-shell排序
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排序的更多相关文章
- 数据结构学习——shell排序的C语言实现
shell排序: 这个排序的命名是来自发明者的名字,和排序的方法没有字面上的联系.所以不要因为名字而感觉很难.在K&R的C程序设计语言中书中只用了几行代码很简洁的实现了这个排序算法.那就来看看 ...
- 数据结构之shell排序
#SIZE 10 //直接插入排序 void insert_sort(){ int i,j; int array[SIZE+1]; ...
- 快排,归并和Shell排序
快速排序 快速排序的执行流程: (1) 先从数列中取出一个数作为基准数. (2) 将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. (3)再对左右区间重复第二步,直到各区间只有一个数. ...
- Shell排序算法和合并排序算法
Shell排序(希尔排序)算法Shell排序严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序. Shell排序的流程:1.将由n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个 ...
- Shell排序 C&&C++
Shell排序 Shell排序是大量数据需要排序时,更为高效的插入排序.它的算法思想基于插入排序的算法思想 流程: (1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等 ...
- 数据结构与算法之--高级排序:shell排序和快速排序
高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...
- 数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++)
数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...
- 数据结构学习(shell排序和归并排序)
# coding=utf-8 # shell排序 # 参数alist:被被排序的列表 def shellsort(alist): gap = len(alist) / 2 while gap > ...
- (2)Java数据结构--二叉树 -和排序算法实现
=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...
随机推荐
- <body> 中的 JavaScript 函数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 6.Spring Cloud初相识-------Zool路由
前言: 在生产环境中,我们不可能将每个服务的真实信息暴漏出去,因为这样太不安全. 我们会选择使用路由代理真实的服务信息,由它负责转发给真实的服务. 新建一个Zool: 1.添加依赖 <?xml ...
- 对AFNetworking的二次封装
HttpTool.h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> typedef void(^HttpS ...
- 自定义组件v-model的实质性理解
用了几个月Vue一直很纠结自定义组件的v-model实现,最近开始学习React时,React中受控组件与状态提升的理念与v-model不谋而合. 转载请注明地址: https://www.cnblo ...
- DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用
DLL 文件编写方法: 1.建立DLL工程 2.声明.定义要导出的函数 BOOL WINAPI InitDlg( HWND hTabctrl,TShareMem* pTshare,CRect* prc ...
- Lintcode算法
题目: 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数. 样例 给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201. 思路:直接交换两个数,然后判断交换之后的 ...
- centos7 openvpn代理搭建
系统环境:centos7.1 拨号ip地址:125.112.194.40(公网) server端部署 一.准备工作 1.检查SELinux状态,关闭 sed -i 's/enforcing/disab ...
- Linux分享笔记:shell终端的介绍
[1] Linux中 “shell终端” 和 “bash解释器” 的区别 shell终端是通过基于系统调用接口开发出的程序,用来让用户与系统进行对话,管理计Linux系统.它是一个命令行工具,操作类似 ...
- Redis学习推荐
Redis快速入门 https://www.yiibai.com/redis/redis_quick_guide.html Redis用途和使用场景 https://blog.csdn.net/wei ...
- 发送post请求几种常见content-type类型
application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了.浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 app ...