排序算法 希尔排序
插入排序的优解, 在数据量大时优势更为明显
算法步骤
隔段对比, 完成排序后, 缩小隔断间隔
可参考:
时间复杂度: O(n log n) ~ O(n log^2 n)
空间复杂度: O(1)
稳定性: 不稳定
-
稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同
代码
C++
template<typename T>
void shell_sort(T array[], int length) {
for(int gap = length/2; gap > 0; gap = gap/2){
//插入排序
for(int i = gap; i < length; i++){
int value = array[i];
int p = i;
while(p-gap > 0 && array[p-gap] > value) {
array[p] = array[p-gap];
p = p - gap;
}
array[p] = value;
}
}
}
引自:
JavaScript
function shellSort(arr) {
var len = arr.length,
temp,
gap = 1;
while(gap < len/3) { //动态定义间隔序列
gap =gap*3+1;
}
for (gap; gap > 0; gap = Math.floor(gap/3)) {
for (var i = gap; i < len; i++) {
temp = arr[i];
for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) {
arr[j+gap] = arr[j];
}
arr[j+gap] = temp;
}
}
return arr;
}
引自:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix