排序算法---冒泡改良的选择排序
2017-08-07 20:53
225 查看
选择排序的思想
选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。
如下图以第一遍选择为例:
Java代码实现
public class SelectSort { public static void main(String[] args) { System.out.println("请输入要排序的个数n:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); int array[] = new int ; System.out.println("请输入要排序的数:"); for (int i = 0; i < n; i++) { array[i] = input.nextInt(); } select(array); System.out.println("排序后的结果为:"); for (int i = 0; i < n; i++) { System.out.print(array[i] + " "); } } public static void select(int array[]) { if (array.length <= 1) {//无需排序 return; } int min;//最小下标 for (int i = 0; i < array.length - 1; i++) { min = i; for (int j = i + 1; j < array.length; j++) { if (array[j] < array[min]) { min = j;//找寻剩下数据中的最小值下标 } } if (min != i) {//如果不是当前i的位置,才交换 int t = array[i]; array[i] = array[min]; array[min] = t; } } } }
复杂度
虽然选择排序是对冒泡排序的改良,在找到最小(大)的元素后才交换,但是选择排序的平均时间复杂度依然为O(n^2)。相关文章推荐
- “《算法导论》之‘排序’”:初级排序算法(选择、冒泡、插入、希尔)
- 常用的排序算法:冒泡,简单选择,直接插入,快速排序,堆排序
- 请用Java实现冒泡、插入、选择排序中的任意一个排序算法。
- 排序算法总结(一)——冒泡、插入、希尔与选择排序
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,快速排序
- 排序算法之初级排序(冒泡、选择和插入)
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- 四种简单的排序算法(插入、冒泡、选择排序、快速排序法)+汉诺塔算法
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- PHP四种基础排序算法--冒泡,直接插入,快速和选择排序
- java排序之冒泡、插入、选择、快速等排序算法
- java面试必备:排序算法之冒泡、选择排序
- 排序算法(三)冒泡、选择排序的Python实现及算法优化详解 推荐
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
- 排序算法(1):冒泡、选择、直接插入排序
- 排序算法大集合,插入、选择、冒泡、希尔、堆、归并、快速排序,总有一款适合你
- 排序算法Java描述:选择、冒泡、插入、希尔、归并、快速及三向切分快速排序