当前位置:   article > 正文

排序——希尔排序

排序——希尔排序

希尔排序实际上是插入排序的优化,所以要先介绍插入排序。

目录

插入排序

思想

演示

代码实现

总结

希尔排序

思想

演示

代码

总结


插入排序

思想

     又称直接插入排序。它的基本思想是将一个值插入到一个有序序列中。直至将所有的值都插入完。

演示

     假设数组某个位置的下标是end,end + 1对应的值为temp。

1707d37cfe714b3faf3afa166c067039.png

     让arr[end],temp进行比较如果arr[end]>temp,将arr[end]向后移一位

13673d93f4ce4215bac340469d3d8f3d.png

在让temp与end的前一位进行比较,如果大于那就重复上述操作,反则跳出循环。注意end只能大于等于0。

     离开循环后会存在上面图示的情况。我们只需要用temp把它给替换掉。

06b18b1f42a145e2a12edc0db6492b17.png

     上面说的是一次插入,所以要再在外面套一层循环把所有的值都插入一次。

代码实现

  1. //插入牌序
  2. void InsertSort(int* arr, int n)
  3. {
  4. for (int i = 0; i < n - 1; i++)
  5. {
  6. int end = i;
  7. int temp = arr[end + 1];
  8. while (end >= 0)
  9. {
  10. if (arr[end] > temp)
  11. {
  12. arr[end + 1] = arr[end];
  13. end--;
  14. }
  15. else
  16. {
  17. break;
  18. }
  19. }
  20. arr[end + 1] = temp;
  21. }
  22. }

总结

  1. 当序列越有顺序时,插入排序的时间效率就越高。
  2. 时间复杂度:O(N^2)(虽然时间复杂度是N^2,那是在逆序的序列情况下,在现实中这种情况一般不会出现)
  3. 空间复杂度:O(1)

希尔排序

思想

     又称缩小增量排序。它的基本思想是将整个待排元素序列分割成若干个小组,相隔一个gap为一组(gap是一个整数),各小组分别进行插入排序,然后缩减gap再进行排序,重复上述操作。当gap==1时,整个序列中的元素基本有序,在对全体元素进行一次插入排序。

演示

     假设gap=3,每隔gap个为一组分组如下:

c593c28150974c0b8df2e55f1f04aeed.png

   遍历一次结束条件:在3对应的下标处加一个gap会正好造成非法访问,所以结束条件是下标小于n - gap。  

     下面的操作就和插入排序一样只不过是相隔gap个插入,经过一次一次的排序序列会变得更有序。

cb942c89ee624b25b74752f7c3d48707.png

在上面提到gap会逐渐变小,那它怎么变小呢?一般是gap = (gap / 3) + 1(这是相对来说比较合理的记住即可)。当gap小于1时即排完序离开循环即可。

代码

  1. //希尔排序
  2. void ShellSort(int* arr, int n)
  3. {
  4. int gap = n;
  5. while (gap > 1)
  6. {
  7. gap = gap / 3 + 1;
  8. for (int i = 0; i < n - gap; i++)
  9. {
  10. int end = i;
  11. int tmp = arr[end + gap];
  12. while (end >= 0)
  13. {
  14. if (arr[end] > tmp)
  15. {
  16. arr[end + gap] = arr[end];
  17. end -= gap;
  18. }
  19. else
  20. {
  21. break;
  22. }
  23. }
  24. arr[end + gap] = tmp;
  25. }
  26. }
  27. }

总结

  1. gap>1:预排序,目的是让序列变得更有序。
  2. 时间复杂度:O(N^1.3)
  3. 空间复杂度:O(1)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/730793
推荐阅读
相关标签
  

闽ICP备14008679号