第一次從待排序的數據中選出最小的一個元素,存放在序列的起始位置,而後再從剩餘的未排序元素中尋找到最小元素,而後放到已排序的序列的末尾。以此類推,直到所有待排序的數據元素的個數爲零。java
通常沒有特殊要求排序算法都是升序排序,小的在前,大的在後。
數組由{6, 5, 4, 1, 3, 2}這6個無序元素組成。web
選擇排序原理:找到這輪的最小值,放到最左邊。算法
第一輪交換前圖示:
數組
第二輪交換前圖示:app
第二輪交換後圖示:動畫
中間第三輪第四輪過程相似,省略。spa
第五輪交換前圖示:3d
咱們分析了選擇排序的原理,發現6個元素須要比較5輪,須要經過一個循環來控制,並且比較的輪數是元素的數量-1。每輪又須要在剩下的元素中找出最小值,也須要使用一個循環。所以須要使用嵌套循環來實現。code
public class SelectionSortTest {
public static void main(String[] args) {
int[] arr = new int[]{6, 5, 4, 1, 3, 2};
selectionSort(arr);
}
// 第一次從待排序的數據元素中選出最小的一個元素,存放在序列的起始位置,
// 而後再從剩餘的未排序元素中尋找到最小元素,而後放到已排序的序列的末尾。
// 以此類推,直到所有待排序的數據元素的個數爲零。選擇排序是不穩定的排序方法。
// 選擇排序每輪必須遍歷完後面的全部元素才能肯定一個最小值.
public static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) { // 外循環控制比較的輪數
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) { // 內循環找到最小值
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
System.out.println("第" + (i + 1) + "輪比較後: " + Arrays.toString(arr));
}
}
}
複製代碼
運行效果以下:orm
第1輪比較後: [1, 5, 4, 6, 3, 2]
第2輪比較後: [1, 2, 4, 6, 3, 5]
第3輪比較後: [1, 2, 3, 6, 4, 5]
第4輪比較後: [1, 2, 3, 4, 6, 5]
第5輪比較後: [1, 2, 3, 4, 5, 6]
複製代碼