Java选择排序
算法步骤
设数组为a[0…n-1]。
1. 初始时,数组全为无序区为a[0..n-1]。令i=0
2. 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。
3. i++并重复第二步直到i==n-1。排序完成。
算法图示
算法基本性能
排序方法 | 平均情况 | 最好情况 | 最坏情况 | 控件复杂度 | 稳定性 |
选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 |
Java代码
package com.sort; import java.util.Random; public class Main3 { // 从小到大 private static void sort(int[] array) { if (array.length <= 1) { return; } for (int i = 0; i < array.length - 1; i++) { int min = i; /** * 在i+1~array.length-1的下标范围内找出最小的一个元素的下标 */ for (int j = i + 1; j < array.length; j++) { if (array[min] > array[j]) { min = j; } } /** * 如果最小的下标变化了,那么交换 */ if (min != i) { int temp = array[i]; array[i] = array[min]; array[min] = temp; } } } /** * 获取指定长度的随机数组 */ public static int[] getRandomArray(int n) { int[] array = new int[n]; Random random = new Random(); for (int i = 0; i < array.length; i++) { array[i] = random.nextInt(500); } return array; } /** * 打印指定数组 */ public static void outputArray(int[] array) { for (int i : array) { System.out.print(i + " "); } System.out.println(""); } public static void main(String[] args) { int[] array = getRandomArray(10); outputArray(array); sort(array); outputArray(array); } }