內容介紹
選擇排序的思想
第一次從待排序的數據中選出最小的一個元素,存放在序列的起始位置,而後再從剩餘的未排序元素中尋找到最小元素,而後放到已排序的序列的末尾。以此類推,直到所有待排序的數據元素的個數爲零。java
選擇排序動畫演示
選擇排序分析
通常沒有特殊要求排序算法都是升序排序,小的在前,大的在後。 數組由{6, 5, 4, 1, 3, 2}這6個無序元素組成。算法
選擇排序原理:找到這輪的最小值,放到最左邊。編程
第一輪交換前圖示: 數組
第一輪交換後圖示:微信
第二輪交換前圖示: 動畫
第二輪交換後圖示: code
中間第三輪第四輪過程相似,省略。blog
第五輪交換前圖示: 排序
第五輪交換後圖示: io
選擇排序代碼編寫
咱們分析了選擇排序的原理,發現6個元素須要比較5輪,須要經過一個循環來控制,並且比較的輪數是元素的數量-1。每輪又須要在剩下的元素中找出最小值,也須要使用一個循環。所以須要使用嵌套循環來實現。
代碼以下:
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)); } } }
運行效果以下:
第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]
總結
- 選擇排序的原理:第一次從待排序的數據中選出最小的一個元素,存放在序列的起始位置,而後再從剩餘的未排序元素中尋找到最小元素,而後放到已排序的序列的末尾。以此類推,直到所有待排序的數據元素的個數爲零。
- 選擇排序在寫代碼時須要使用兩個循環:外循環控制比較的輪數,內循環找到最小值
原創文章和動畫製做真心不易,您的點贊就是最大的支持! 想了解更多文章請關注微信公衆號:表哥動畫學編程