-
简介:
希尔排序是插入排序的一种,又称
缩小增量排序
,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因希尔(Donald Shell)与1959年提出而得名。希尔排序是基于插入排序的两点性质而提出改进方法的:
- 插入排序在对几乎已经排好序的的数据进行操作时,效率高,即可以达到线性排序的效率。
- 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。
希尔排序为了加快插入的速度,让数据移动时可以实现跳跃移动,节省了一部分时间开支。
希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。
-
算法步骤:
- 根据数据的长度计算出第一个
增量
。 - 所有距离
增量
的倍数的数据为一组,在各组内进行直接插入排序。 - 计算出第二个
增量
,再把所有距离增量
的倍数的数据分为一组,进行直接插入排序。 - 直至增量为1,算法结束。
- 根据数据的长度计算出第一个
-
代码实现:
void shellsort(int data[], int len) { //i为增量 ,增量取数组的1/3到中间的长度 for (int i = len / 2; i > 0; i /= 2) { //从增量开始往后循环 for (int j = i; j < len; j ++) { //减去增量就得到改组的前一个数据 for (int x = j - i; x >= 0; x-=i) { //判断两个数的大小,交换两个数的位置 if (data[x] > data[x + i]) { int temp; temp = data[x]; data[x] = data[x + i]; data[x + i] = temp; } } } }
新手笔记之希尔排序
最新推荐文章于 2024-07-09 23:56:48 发布