【选择排序】
来源:互联网 发布:python ipython 编辑:程序博客网 时间:2024/05/20 00:50
public static void selectionSort(int[] a){int nElems = a.length;int out,in,min;for(out=0;out<nElems-1;out++){min = out;for(in=out+1;in<nElems;in++){if(a[in]<a[min])min = in;}if(out!=min){int temp = a[out];a[out] = a[min];a[min] = temp;}}}
基本思路:
从代码中我们可以看出,外层循环变量out从初始位置0开始,逐步递增,最大到第nElems-1个数位,对应角标位nElems-2。内层循环,在网外层循环out的基础上加1,而后逐步递增,最大到数组的最大位,对应角标为nElems-1。在进行比较时,会将最小的数的角标存入到min变量中,当结束内层循环时,将out位的数值与最小角标处的数值进行交换,这样out位往左,都是有序的,从小到大。
时间复杂度:
数组元素个数是N,第一轮中共比较了N-1次,接下来逐次递减1,那么比较的次数是:
(N-1)+(N-2)+(N-3)+...+1 = N*(N-1)/2 = O(N^2)
如果数组元素顺序恰好是由小到大,那么交换的次数最小为0,如果顺序是由大到小,那么便是交换的最多的次数,与外层循环次数相同,因此,最坏的情况下交换次数为:
(N-1)/2 = O(N)
由此可以得出这样的结论,选择排序的平均时间复杂度为O(N)
算法稳定性:
选择排序是一个不稳定的排序算法。参照网上的例子:
对数组[5, 3, 5, 2, 6]进行选择排序时,我们知道,在第一轮比较时,会将元素2的角标标记为最小,而后,将第一个元素5与元素2进行互换,这样数组中的两个元素5的前后位置就发生了改变。由此,选择排序是不稳定的排序算法。
算法不变性:
使用这个算法进行排序时,数组下标小于等于out位置的元素都是有序的。
本文首次发表于依鹏csdn博客,转载请注明出处:http://blog.csdn.net/m0_37240709/article/details/78038358
阅读全文
0 0
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序:
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- C#批量写入MySQL100w条数据
- java8 lambda表达式原理
- 利用poi完成导出excel功能
- ubuntu Git升级
- TabLayout的使用
- 【选择排序】
- 产品需求文档分享:「病利贴」
- struts2架构中核心对象的探索—— Dispatcher&ConfigurationProvider
- vue2 + router + vuex + vux + axios 开发的一点总计
- redis在工程中的使用
- caffe-pvanet
- Java设计模式--观察者模式【Observer Pattern】
- 解析数据,设置图片的圆角,popwindow弹框
- springmvc限流拦截器