排序算法---(二)

引言

紧接上文,我们再来讲解一下两种排序:希尔排序、简单选择排序

希尔排序

1.思路

希尔排序离不开插入排序,整体思路是先选一个递减的间隔序列,按照间隔分组,每组做插入排序,间隔不断缩小,直到间隔为1就完成了整体插入排序

具体的插入排序流程请看上文,这里博主依旧写步骤带大家清晰的看一下排序逻辑:

复制代码
待排序数组:[8, 9, 1, 7, 2, 3, 5, 4, 6, 0]
长度 n = 10
间隔 gap:5->2->1

gap=5:
组 1:下标 0,5 → [8, 3]
组 2:下标 1,6 → [9, 5]
组 3:下标 2,7 → [1, 4]
组 4:下标 3,8 → [7, 6]
组 5:下标 4,9 → [2, 0]
每组分别插入排序:
[8,3] → [3,8]
[9,5] → [5,9]
[1,4] → [1,4]
[7,6] → [6,7]
[2,0] → [0,2]
排序后数组为:[3, 5, 1, 6, 0, 8, 9, 4, 7, 2]

gap=2(差距为2,但是要一直++,所以隔一个元素为一组)
组 1:下标 0,2,4,6,8 → [3, 1, 0, 9, 7]
组 2:下标 1,3,5,7,9 → [5, 6, 8, 4, 2]
分别插入排序:
组 1:[3,1,0,9,7]
1 插入 → [1,3,0,9,7]
0 插入 → [0,1,3,9,7]
9 不动
7 插入 → [0,1,3,7,9]
组 2:[5,6,8,4,2]
6 不动
8 不动
4 插入 → [4,5,6,8,2]
2 插入 → [2,4,5,6,8]
排序后数组:[0, 2, 1, 4, 3, 5, 7, 6, 9, 8]

gap=1(此时就是普通插入排序)
此处省略,不懂请看上文

2.代码

复制代码
//希尔排序
for(int h=n/2;h>=1;h/=2){
    for(int j=h;j<n;j++){
        for(int i=j-h;i>=0;i-=h){
            if(arr[i]>arr[i+h]){
                int temp=arr[i];
                arr[i]=arr[i+h];
                arr[i+h]=temp;
            }
        }
    }
}

简单选择排序

1.思路

先假设minIndex为 i ,从下标为 i=0 位置开始,找到 i 之后数组的最小值,找到就和minIndex交换数值,记录该轮的最小值和指针 i 所指元素进行交换,交换完 i 往后走,重复以上步骤,这样就实现了每一轮都找到了最小值(当前),找到就依次放前面

这里博主手写了两轮的逻辑,剩下以此类推:

2.代码

java 复制代码
//简单选择排序
for(int i=0;i<n;i++){
    int minIndex=i;
    for(int j=i+1;j<n;j++){
        if(arr[j]<arr[minIndex]){
            minIndex=j;
        }
    }
    int temp=arr[i];
    arr[i]=arr[minIndex];
    arr[minIndex]=temp;
}

小舟有话说

还有其他排序,博主会一一讲解的,这个排序的代码初学者尽量默写下来,这个还是很重要的!如果觉得博主写的不错,点点赞点点关注吧,下次找我不迷路~

相关推荐
lqqjuly7 分钟前
知识蒸馏:理论、算法与可运行实现
人工智能·深度学习·算法
水上冰石16 分钟前
comfui的sd1.5模型,有多少采样算法,详解每一个采样算法
人工智能·算法
黎阳之光34 分钟前
视频孪生+空天地水工融合,黎阳之光构建智慧水利监测新范式
大数据·人工智能·物联网·算法·安全
cheems95271 小时前
[算法手记] 贪心 爬楼梯问题
算法·贪心算法
KaMeidebaby1 小时前
卡梅德生物技术快报|酵母双杂交 cDNA 文库构建与蛋白互作筛选流程
服务器·前端·数据库·人工智能·算法
影寂ldy1 小时前
C#Dictionary字典
数据结构
sheeta19981 小时前
LeetCode 每日一题笔记 日期:2026.05.27 题目:3121. 统计特殊字母的数量 II
笔记·算法·leetcode
ST——Jess1 小时前
年度行业趋势研究报告:泛心理数字化赛道“流日推演”的算法困境与高保真交互范式重构
人工智能·算法·架构
Tisfy1 小时前
LeetCode 3300.替换为数位和以后的最小元素:一次遍历
数学·算法·leetcode·模拟
garmin Chen1 小时前
LeetcodeHot100打卡(14、合并空间,15、轮转数组,16、除了自身以外数组乘积,17.缺失的第一个整数)
java·笔记·学习·算法