排序-选择排序
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的全排序来测试排序耗时,及比较循环操作的次数,优化后排序性能有稍微提升。
以上是关于排序-选择排序的主要内容,如果未能解决你的问题,请参考以下文章