希尔排序算法
2016-01-14 16:34
183 查看
希尔排序
排序,希尔排序,ShellSort希尔排序有是又称为缩小增量排序。希尔排序通过一定的间隔(增量)将待排序序列分成个子序列(分组),再个子序列进行插入排序,通过不断缩小间隔的大小,最终实现原序列的排序。
希尔排序使用一个序列{h1,h2,…,hk}(叫做增量序列)对待排序序列进行分割。
比如含有10个键值的待排序序列{7,9,2,5,6,1,3,30,28,17}存储于数组a[]中。
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
7 | 9 | 2 | 5 | 6 | 1 | 3 | 30 | 28 | 17 |
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
7 | 9 | 2 | 5 | 6 | 1 | 3 | 30 | 28 | 17 |
组1 | 组2 | 组3 | 组4 | 组5 | 组1 | 组2 | 组3 | 组4 | 组5 |
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
1 | 3 | 2 | 5 | 6 | 7 | 9 | 30 | 28 | 17 |
组1 | 组2 | 组3 | 组4 | 组5 | 组1 | 组2 | 组3 | 组4 | 组5 |
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
1 | 3 | 2 | 5 | 6 | 7 | 9 | 30 | 28 | 17 |
组1 | 组2 | 组1 | 组2 | 组1 | 组2 | 组1 | 组2 | 组1 | 组2 |
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
1 | 3 | 2 | 5 | 6 | 7 | 9 | 17 | 28 | 30 |
组1 | 组2 | 组1 | 组2 | 组1 | 组2 | 组1 | 组2 | 组1 | 组2 |
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
1 | 3 | 2 | 5 | 6 | 7 | 9 | 17 | 28 | 30 |
组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 |
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 5 | 6 | 7 | 9 | 17 | 28 | 30 |
组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 | 组1 |
// 希尔排序 (缩小增量排序)
void ShellSort(ElementType a[], int N)
{
int i, j, Increment;
ElementType temp;
for (Increment=N/2; Increment>0; Increment/=2)
{
for (i=Increment; i<N; i++)
{
temp = a[i];
for (j=i; j>=Increment && a[j-Increment]>temp; j-=Increment)
a[j] = a[j-Increment];
a[j] = temp;
}
}
}
相关文章推荐
- 字符编码及转换
- Java 网络编程(一) 网络基础知识
- Linux中JDK的安装和配置方法
- 【SQL Server学习笔记】表和列增加注释
- LINUX 的Singal 信号 定义 说明
- C++中关于[]静态数组和new分配的动态数组的区别分析
- 面试题57:正则表达式匹配*
- 数据结构一线性表的操作
- 基本的灰度变换方法
- SVN常用命令之update
- 文章标题
- SQL SERVER更改表架构
- eclipse pom文件配置项目注意
- DrawerLayout安卓开发抽屉样式的左右都可以滑动的菜单
- CSS-Day03-CSS样式-背景
- 登陆超时处理
- ios 栈区,堆区
- bootstrap零碎知识点
- 干货,pomelo路由解读
- ios Coredata 的 rollback undo 等事物处理函数