算法基础 | 常用排序算法小结(二)

简介: 算法基础 | 常用排序算法小结

2

选择排序(Selection Sort)


说到选择排序,这个也是灰常易于理解的。相信大家看一眼基本原理就懂了。还是以数组A[n]与升序排列为例说明问题。


基本原理:

1)先从A[0]~A[n]中找最小的元素A[i],交换A[0]和A[i]的位置。


2)再从剩下的元素A[1]~A[n]中找最小的元素A[j],交换A[1]和A[j]的位置。


3)不断在剩下的元素中找最小的元素丢到开头,直到剩下最后一个元素。


还不懂?再来看看个图片:

微信图片_20220420152159.jpg

代码哪能少?

微信图片_20220420152204.jpg

选择排序每次将最小值丢到开头的时候,有可能会打乱相等元素的位置。因此,它是不稳定的。也注意区分其和冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。


3

插入排序(Insertion Sort)


大家打过扑克牌嘛?我们在对手上的扑克牌进行排序的时候,是不是将右手上的牌插到左手上已经排序好的牌之间?这跟我们的插入排序是有点类似的。

微信图片_20220420152207.jpg

还是以A[n]为例说明问题。

基本原理:

1)从A[0]开始,则A[0]可认为是已排序列。


2)取出下一个元素(比如A[1]),在已排序列中从右往左扫描,如果已排序列中的元素大于取出的元素,那么就将该元素(已排序列中的)往后挪一个位置。


3)直到在已排序列中找到一个小于等于取出元素的元素。将取出元素插入该元素(已排序列中的)后一个位置。


4)不断重复步骤2-3.直到所有元素都插入到已排序列。


还不明白?看看图片

微信图片_20220420152212.jpg

请问代码在哪里???

亲,这么详细的注释,

别跟我说你看不懂

微信图片_20220420152215.jpg

可以看出,关于相等元素,排序前后并不会改变他们的位置。因此,插入排序又是稳定的。


4

希尔排序(Shell Sort)


希尔排序,也叫递减增量排序,是插入排序的一种更高效的改进版本。其中希尔排序是基于以下几点做出改进的:


1)直接插入排序对于几乎排好的数据有着极高的效率。基本可以达到线性排序时的效率。


2)但是对于一般的乱序数据来说,直接插入排序由于每次只能将数据往后搬一位,从这点上来说它效率又是及其低下的。


基本原理:

1)将无序数据分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行直接插入排序;


2)然后再选择一个更小的增量,再将数据分割为多个子序列进行直接插入排序......


3)不断重复步骤2,直到最后增量变为1,即对所有数据使用直接插入排序(此时所有数据几乎都排好了,直接插入效率较高),最终排序完成。

 

唉,小编就不指望你们能看懂,还是来看看图片吧。

微信图片_20220420152219.jpg

关于不同增量的选取对于希尔排序性能的影响,有不同的观点。这里就不过多赘述。

代码!代码!代码在哪里!!!???


微信图片_20220420152223.jpg

值得一提的是,由于数据划分为多个区域,在每个区域中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱。因此希尔排序是不稳定的排序。


相关文章
|
4月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
283 5
|
4月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
285 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
5月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
256 1
|
4月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
199 0
|
4月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
150 0
|
5月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
135 0
|
4月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
231 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
4月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
184 1
|
4月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
122 0
|
5月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
350 3

热门文章

最新文章