排序-选择排序

Posted lyear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序-选择排序相关的知识,希望对你有一定的参考价值。

选择排序

由第一个元素开始,与后续各元素逐个比较,找出最小值,并将最小值与一个元素交换位置;随后由第二个元素开始,同样与其余元素逐个比较,找出最小值与第二个元素交换位置;重复以上操作,直到至倒数第二个元素比较完成,此时数组有序。

编码实现

首先定义排序接口,后续排序实现将实现Sort接口:

排序-选择排序

抽取常用方法,以便后续使用

排序-选择排序

排序-选择排序

实现:

排序-选择排序

结果验证:

排序-选择排序

选取其中一次输出:

排序-选择排序

复杂度

该算法操作次数为 : (n-1)+(n-2)+(n-3)+(n-4)+...+1 = n*(n-1)/2 

平均时间复杂度为O(n^2),平均空间复杂度为O(1)

稳定性

由于当排序较前的值与排在较后的小值发生交换时,将无法保证相同值的原始顺序,因此选择排序是不稳定排序。

优化思路

以上选择排序每次循环只选出最小值与前面元素交换,考虑每次循环同时选出最小值和最大值分别交换至前方和后方,从而减少循环处理次数。

优化后的选择排序实现

排序-选择排序

借助局部变量left、right记录此时范围内数组最小值与最大值应该在的位置,每次循环同时找出最小值与最大值,后续分别进行位置交换,此时需注意当待交换的最小值在right位置或待交换的最大值在left位置时,可能在发生一次交换后会导致原先确定的最大值/最小值发生改变,因此在两次交换中间需检测是否存在该特殊情况,如有需将位置修正再进行交换。

结果验证

耗时与循环操作比较测试

借助1~10的全排序来测试排序耗时,及比较循环操作的次数,优化后排序性能有稍微提升。

以上是关于排序-选择排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

选择排序归并排序快速排序。

❤️数据结构入门❤️(4 - 2)- 选择排序

排序算法6--选择排序--简单选择排序

[ 数据结构 -- 手撕排序算法第四篇 ] 选择排序

选择排序之二:简单选择排序