希爾排序又稱為縮小增量排序,它是一種插入排序,是直接插入排序的優化。與直接插入排序不同的是它按照間距gap分組,對間距為gap的數進行插入排序。
① . 預排序:令gap=x,對間距為x的資料進行插入排序,gap數值逐漸減小gap = gap/3+1;(此時接近有序);
② . 直接插入排序:當gap=1(為有序數列)。
**:
//希爾排序
void shellsort(int*a, size_t n)
else
break;
}a[end + gap] = tmp;}}
}int main()
; int length = sizeof(arr) / sizeof (arr[0]);
shellsort(arr, length);
for (int i=0; i < length; ++i)
cout
<< endl;
}
執行結果:
平均時間複雜度o(n^1.25)~o(1.6n^1.25)
o(1)
不穩定,因為有間距所以相同資料可能會交換位置
① . 穩定性不同;希爾不穩定,直接插入穩定。
② . n較大時用希爾排序,希爾的比較次數和移動次數都要比直接插入排序少;n較小且接近有序時用直接插入排序更快。
③ . 直接插入排序也適用於鏈式儲存結構;希爾排序不適用於鏈式結構。
排序(二) 希爾排序
希爾排序 shell s sort 又稱 縮小增量排序 diminishing increment sort 它也是一種屬於插入排序類的方法,但在時間效率上較 排序 一 中的幾種排序方法有較大的改進。基本思想 先將整個待排記錄序列分割成為若干個子串行分別進行直接插入排序,待整個序列中的記錄 基本有序...
排序 二 希爾排序,堆排序
1.原理 希爾排序法又稱縮小增量法。希爾排序法的基本思想是 先選定乙個整數,把待排序檔案中所有記錄分成個組,所有距離為的記錄分在同一組內,並對每一組內的記錄進行排序。然後,取,重複上述分組和排序的工作。當到達 1時,所有記錄在統一組內排好序。希爾排序是對直接插入排序的優化。當gap 1時都是預排序,...
排序演算法(二) 希爾排序
主要思想 先將待排序列分割成若干個子串行,在子串行內分別進行直接插入排序,待整個序列基本有序時,再對全體記錄進行直接插入排序。例如 第一趟 d 5,將所有相距為 5 的記錄分為一組,從而將整個序列分割成了 5 個子序列。第二趟 d 2,將所有相距為 2 的記錄分為一組,從而將整個序列分割成了8 個子...