当前位置:   article > 正文

数据结构:插入排序和希尔排序

数据结构:插入排序和希尔排序

插入排序

逆序的情况下:       时间复杂度:O(N^2)                                             空间复杂度:O(1)

顺序的情况下:       时间复杂度:O(N)                                                 空间复杂度:O(1)

   1、插入排序的思想

        插入排序在我们生活中最常见的例子就是打牌时候的理牌的过程,可以看作为插入排序。我们拿一个数,先和数组的第一个数比较,比它小就插入,比它大就放到它的后面。

        


   2、代码实现

        我们先实现单趟的排序。按照上面的思想,先取数组的一位数据tmp与前面的数end比较,比它小就插入,比它大就放到它的后面。但不是直接的插入,因为我们还不确定更前面有没有比tmp小的数据,所以若遇到比tmp要大的数就直接后移,直到遇到比tmp小的数,就把tmp赋值到end+1的位置。

  1. void InsertSort_Test(int* arr, int n)
  2. {
  3. //arr为数组首元素的地址,n为数组的大小
  4. int end = i;//i为end要开始的位置
  5. int tmp = arr[end + 1];
  6. while (end >= 0)
  7. {
  8. if (arr[end] > tmp)
  9. {
  10. arr[end + 1] = arr[end];
  11. end--;
  12. }
  13. else
  14. {
  15. break;
  16. }
  17. }
  18. arr[end + 1] = tmp;
  19. }

        然后我们要实现多趟的排序, 只需要改变 i 的值就可以改变endtmp,使其可以多次的单趟排序直至排好。注意:这里的i < n - 1,因为下面的 tmp = arr[end + 1]

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

 希尔排序

平均时间复杂度:O(N^1.3)                                             空间复杂度:O(1)

   1、希尔排序的思想

        希尔排序的思想与插入排序很像,不过希尔排序将数组分为了很多小组进行插入排序,然后缩小组的大小直至1,那就跟插入排序一样了。

   2、代码实现

        为了实现组gap可以分到1,我们可以这样gap = gap / 3 + 1,保证gap可以到1。

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

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

闽ICP备14008679号