排序算法2---希尔排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shanghx_123/article/details/83110396

希尔排序

  1. 基本思想:希尔排序是插入排序的一个变种。不同之处在于我们按步长gap分组,对每组的记录采用直接插入排序,随着步长的逐渐减少,分组包含的记录越来越多,直到gap=1时,构成了一个有序记录。
  2. 时间复杂度: O(n^1.25) ~ 1.6*O(n^1.25)
  3. 空间复杂度: O(1)
  4. 稳 定 性 :不稳定
  5. 适用场景:数据量较大
    下图中为了方便,对gap以gap/2来计算,但最优的算法是gap/3+1。

在这里插入图片描述

void ShellSort(int* arr, int size)
{
 if (arr == NULL || size <= 0)
   return;
 int gap = size;//gap为增量
 while (gap > 1)
 {
   gap = gap / 3 + 1;//这样给是最优的
   for (int idx = gap; idx < size; ++idx)
   {
     int end = idx - gap;//分组后,当前元素的前一个元素
     int key = arr[idx];//保存当前元素
     //按升序排序
     while (end >= 0 && arr[end] > key)
     {
       arr[end + gap] = arr[end];
       end -= gap;
     }
     arr[end + gap] = key;
   }
 }
}

猜你喜欢

转载自blog.csdn.net/shanghx_123/article/details/83110396