template<typename T>
void shellSort(T arr[], int n) {
// 有很多论文研究各种不同的递增序列,但都无法证明某个递增序列是最好的
// 该递增序列的计算和使用都比较简单,和复杂递增序列的性能接近
// 相当于把插入排序的代码将移动元素的距离由1改为h即可
int h = 1;
while (h < n / 3) {
h = h * 3 + 1;
}
while (h >= 1) {
for (int i = h; i < n; i++) {
T insertElement = arr[i];
int j;
for (j = i; j >= h && insertElement < arr[j - h]; j -= h) {
arr[j] = arr[j - h];
}
arr[j] = insertElement;
}
h = h / 3;
}
}
希尔排序(C++)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 希尔排序(shell sort)是一个减少增量的排序算法,其中也运用了直接插入排序 下面我们先来看一道练习题理解一...