#include <iostream>
using namespace std;
/**
* 希尔排序
* @tparam T 数组类型
* @param arr 数组名
* @param n 长度
*/
template<class T>
void shellSort(T arr[], int n) {
// Hibbard 增量 2^k - 1
int det = 1;
while (det < n) {
det = det * 2 + 1;
}
while (det > 0) {
for (int i = det; i < n; ++i) {
T aux = arr[i];
int j;
for (j = i; j >= det && aux < arr[j - det]; j -= det) {
arr[j] = arr[j- det];
}
arr[j] = aux;
}
det = (det - 1) / 2;
}
}
int main() {
int arr[] = {-1, 0, -2, 1, 9, 0, 2, 5, 4, 3};
int len = sizeof(arr) / sizeof(arr[0]);
shellSort(arr, len);
for (const int &temp: arr) {
cout << temp << " ";
}
cout << endl;
return 0;
}
希尔排序-C++
最新推荐文章于 2021-11-18 00:01:58 发布