插入排序
插入排序
直接插入排序
插入排序(Insertion-Sort) 的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
public static void sort(int[] arr){
if (arr.length == 0) return;
int curr = 0;
for (int i = 0;i<arr.length-1;i++){
curr = arr[i+1];
int index = i;
while (index>=0 && curr<arr[index]){
arr[index+1] = arr[index];
index--;
}
arr[index+1] = curr;
}
}
希尔排序(插入的改良版)
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。
先比直接插入排序,可以认为是增量为一的多次希尔排序,直接插入排序的增量是一,每次数据移动都是一位一位向后移动。而希尔排序会随着排序的次数缩小增量,最后增量变为一,并完成排序。
public static void sort(int[] arr){
//定义跨度
int gal = arr.length/2;
int curr = 0;
while (gal>0) {
for (int i = gal; i < arr.length ; i++) {
//插入操作
curr = arr[i];
int index = i - gal;
while (index >= 0 && arr[index] > curr) {
arr[index + gal] = arr[index];
//根据增量跨度移动
index -= gal;
}
arr[index + gal] = curr;
}
gal /= 2;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)