基于Java实现的选择排序算法
选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累。
简述
选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间。其实选择排序原理很简单,就是在未排序序列中找到最小(大)的元素然后放到数组前面,然后再从剩下的未排序序列中找到最小(大)的元素放在上一次找到最小(大)元素的后面,以此类推完成排序。
动图演示
看下动图上的演示,就能够找出排序规律,非常之简明易懂。
(算法动图来源于参考资料,详细请往下翻阅)
代码实现
1 /** 2 * 选择排序 3 * @param array 待排序数组 4 * @return 已排序数组 5 */ 6 public static int[] selectionSort(int[] array) { 7 int len = array.length; 8 // 如果数组长度为0或者1,都是不用排序直接返回 9 if(len == 0 || len == 1) { 10 return array; 11 } 12 for(int i = 0; i < len - 1; i++) { 13 int minIdx = i; 14 for(int j = i + 1; j < len; j++) { 15 // 找到最小的数 16 if(array[minIdx] > array[j]) { 17 // 保存最小数的索引 18 minIdx = j; 19 } 20 } 21 // 如果一轮比较下来都没有变更最小值的索引则无需调换顺序 22 if(minIdx != i) { 23 int tmp = array[i]; 24 array[i] = array[minIdx]; 25 array[minIdx] = tmp; 26 } 27 } 28 return array; 29 }
算法分析
最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
由此看出,选择算法的排序情况是很稳定的,不管输入什么样的数据都是一样的时间复杂度。
参考资料
1、https://www.cnblogs.com/guoyaohua/p/8600214.html
原创作者:Captain&D
Captain&D所发布的博文均为原创,概不任意转载,如有参考必定给出原文链接。
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。