排序算法---(二)

引言

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

希尔排序

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;
}

小舟有话说

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

相关推荐
郝学胜-神的一滴7 分钟前
[ 力扣 1124 ] 解锁最长良好时段问题:前缀和+哈希表的优雅解法
java·开发语言·数据结构·python·算法·leetcode·散列表
戴西软件8 分钟前
戴西CAxWorks.VPG车辆工程仿真软件|假人+座椅双调整 汽车仿真效率直接拉满
java·开发语言·人工智能·python·算法·ui·汽车
Tairitsu_H10 分钟前
C++入门指南:从基础语法到核心特性全解析
c++·算法·基础
programhelp_10 分钟前
2026 高盛(Goldman Sachs)Coding Interview 真题分享|Design HashMap + 其他面试题完整解析
算法·哈希算法
Pentane.14 分钟前
力扣HOT100:T.1 两数之和|循环遍历算法笔记及打卡(12/100)
c++·笔记·算法·leetcode
王老师青少年编程15 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:士兵站队
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·士兵战队
无限进步_19 分钟前
二叉树的中序遍历(非递归实现)
开发语言·数据结构·c++·windows·算法·visual studio
计算机安禾24 分钟前
【数据结构与算法】第48篇:算法思想(三):贪心算法
c语言·开发语言·数据结构·算法·贪心算法·代理模式·图论
_深海凉_30 分钟前
LeetCode热题100-爬楼梯
算法·leetcode·职场和发展
j_xxx404_31 分钟前
力扣C++算法:哈希表(存在重复元素|存在重复元素II|字母异位词分组)
算法·leetcode·散列表