1. 程式人生 > >排序演算法2---希爾排序

排序演算法2---希爾排序

希爾排序

  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; } } }