希尔排序
介绍
1.又称缩小增量排序
2.是插入排序的改进,减小交换次数
3.时间:交换法>移动法,因为访问数组的次数更少
基本思想
1.按一定增量分组,对每组使用插入排序
2.随增量逐渐减少,分组也减少
3.增量为1时,全部元素分为一组,最后一次插入排序,完成排序
代码实现(从小到大排序)
public class ShellSort {//从小到大排序
//交换法
public static void swapShellSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int temp;
for (int gap = array.length / 2; gap > 0; gap /= 2) {//gap既是组数,又是步长
for (int i = gap; i < array.length; i++) {//i是分组中无序表第一个元素
for (int j = i - gap; j >= 0; j -= gap) {//j是分组中有序表最后一个元素
if (array[j] > array[j + gap]) {//无序表第一个元素,在有序表从尾到头遍历比较
temp = array[j];//符合规则就交换,类似冒泡
array[j] = array[j + gap];
array[j + gap] = temp;
}
}
}
}
}
//移动法
public static void shiftShellSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
for (int gap = array.length / 2; gap > 0; gap /= 2) {//gap既是组数,又是步长
for (int i = gap; i < array.length; i++) {//i是分组中无序表第一个元素
int insert = array[i];//储存无序表第一个元素
int index = i - gap;//有序表最后一个元素的下标
while (index >= 0 && insert < array[index]) {//与插入排序相同
array[index + gap] = array[index];
index -= gap;
}
array[index + gap] = insert;
}
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战