算法学习之排序算法(四)(希尔排序)
来源:互联网 发布:淘宝女装店铺素材 编辑:程序博客网 时间:2024/05/18 00:47
1、算法思想
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种威力加强版。
希尔排序的基本思想是
把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。
随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。
在上面这幅图中:
初始时,有一个大小为 10 的无序序列。
在第一趟排序中,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。
接下来,按照直接插入排序的方法对每个组进行排序。
在第二趟排序中,我们把上次的 gap 缩小一半,即 gap2 = gap1 / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。
按照直接插入排序的方法对每个组进行排序。
在第三趟排序中,再次把 gap 缩小一半,即gap3 = gap2 / 2 = 1。 这样相隔距离为 1 的元素组成一组,即只有一组。
按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。
需要注意一下的是,图中有两个相等数值的元素 5 和 5 。我们可以清楚的看到,在排序过程中,两个元素位置交换了。
所以,希尔排序是不稳定的算法。
2、代码实现(严格定义)
void shellsort1(int a[], int n){ int i, j, gap; for (gap = n / 2; gap > 0; gap /= 2) //步长 for (i = 0; i < gap; i++) //直接插入排序 { for (j = i + gap; j < n; j += gap) if (a[j] < a[j - gap]) { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; } }}
3、改进代码
void shellsort2(int a[], int n){ int j, gap; for (gap = n / 2; gap > 0; gap /= 2) for (j = gap; j < n; j++)//从数组第gap个元素开始 if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序 { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; }}
- 算法学习之排序算法(四)(希尔排序)
- 排序算法总结(四)希尔排序
- 排序算法(四)希尔排序
- 排序算法(四)希尔排序
- 排序算法(四)- 希尔排序
- 排序算法(四) 希尔排序
- java算法之四希尔排序(插入排序)
- 排序算法之 —— 希尔排序(四)
- 经典算法学习:排序之希尔排序(壳排序)
- 算法学习之希尔排序(java)
- 算法学习之排序算法:希尔排序
- 蛙步学排序算法之四 - 希尔排序
- 【算法-排序之四】希尔排序
- 【算法-排序之四】希尔排序
- 排序算法之希尔排序(Shellsort)
- 排序算法之希尔排序(ShellSort)
- 学习回顾算法(希尔排序算法)
- 排序:希尔排序(算法)
- hdu 1317 XYZZY (负权回路问题,SPAF实现)
- OC 内存管理的黄金法则
- 南平哪里加值电话 供应吸费电话 代理增值电话
- 不是技术牛人,如何拿到国内IT巨头的Offer
- 厦门声讯电话吸费 高收费电话 无需经验
- 算法学习之排序算法(四)(希尔排序)
- Spring-ContextLoaderListener
- 什么是CSS
- 十道海量数据处理面试题与十个方法大总结
- LeetCode(215)Kth Largest Element in an Array
- 使用easyBCD 安装 Win8 + Ubuntu 13.10 双系统
- VS2012 快捷键
- [mahout in action]mahout中用于推荐引擎的数据结构(二)
- PyCOn2013大会笔记i