排序算法---(二)

引言

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

希尔排序

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

小舟有话说

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

相关推荐
青山木8 分钟前
Hot 100 --- 打家劫舍
java·数据结构·算法·leetcode·动态规划
机器学习之心19 分钟前
均值、中值、圆周期:三种 InSAR 干涉相位滤波的实测对比与参数取舍
算法·均值算法
xy202629 分钟前
多轮 Tool Agent 训不动?先把环境 token 从 loss 里拿掉
算法
wzdark42 分钟前
多核架构下算法并行化的瓶颈与突破点4
算法·架构
阿明61 小时前
Leetcode: 283. 移动零
算法·leetcode·职场和发展
葫三生1 小时前
三生原理与《涌现:从简单规则到复杂世界》在“简单规则生成复杂系统”核心思路上存在理论呼应?
人工智能·科技·算法·机器学习·开源
YSL0701241 小时前
线性表和顺序表
数据结构
6Hzlia1 小时前
【Classic 150 刷题计划】 LeetCode 274. H 指数 | C++ 二分答案法 (单调性降维打击)
c++·算法·leetcode
行者全栈架构师2 小时前
WorkBuddy 实战:50 份简历 30 分钟筛完,还能自动出评估报告
人工智能·算法·微信
huang5791472 小时前
数据结构的抽象化与接口复用设计理念4
数据结构