希爾排序是插入排序的改進版,通過分組進行間隔插入排序,逐步縮小間隔(增量序列),最終間隔為 1 時完成整體有序。常用增量序列為 n/2, n/4, ..., 1。
#include <iostream>
using namespace std;
// 希爾排序(升序)
void ShellSort(int a[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; ++i) {
int temp = a[i];
int j;
for (j = i - gap; j >= 0 && temp < a[j]; j -= gap) {
a[j + gap] = a[j];
}
a[j + gap] = temp;
}
}
}
// 列印陣列
void PrintArray(int a[], int n) {
for (int i = 0; i < n; ++i)
cout << a[i] << ' ';
cout << endl;
}
int main() {
int a[9] = {7, 3, 5, 8, 9, 1, 2, 4, 6};
ShellSort(a, 9);
PrintArray(a, 9); // 輸出: 1 2 3 4 5 6 7 8 9
return 0;
}