大家好,我是苏貝,本篇博客带大家了解希尔排序,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- 一. 基本思想
- 二. 实现希尔排序(以数组升序举例)
-
- 2.1 预排序
- 2.2 排序
- 三. 对比直接插入排序和冒泡排序
一. 基本思想
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数gap,把待排序文件中所有记录分成gap个组,所有距离为gap的记录分在同一组内,并对每一组内的记录进行排序。然后,取gap=gap/2或者gap=gap/3+1(原因下面会说),重复上述分组和排序的工作。当到达gap=1时,所有记录已经排好序。
二. 实现希尔排序(以数组升序举例)
希尔排序可以分为2步:预排序和排序
预排序的目的是让数组接近有序
排序的目的是让数组有序
2.1 预排序
为了方便理解,我们先将gap置为3,即将数组分为3组。再将每一组都分别进行直接插入排序,最后数组就会接近有序
点击了解直接插入排序
下面代码中,第二个for循环就是每一组的直接插入排序,加入第一个for循环就是gap组的直接插入排序。因为相同组相邻的下标相差gap,所以将直接插入排序中的1全部替换成为gap。
for (int i = 0; i < gap; i++)
{
for (int j = i; j < n - gap; j += gap)
{
int end = j;
int tmp = a[end + gap];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + gap] = a[end];
end -= gap;
}
else
break;
}
a[end + gap]