高效理解排序之——選擇排序-含JAVA程式碼(簡潔明瞭,非無腦COPY)

weixin_48470176發表於2020-12-01

前言

選擇排序(Selection Sort),(從小到大的排序)每次選擇一個最值放入第一個位置,個人認為原理比氣泡排序的原理更好理解。

基本思路

  1. 在所有的元素中選擇一個最小的元素,與第一個位置的元素交換位置。
  2. 在剩下的元素中選擇一個最小的元素與第二個元素交換位置。
  3. 重複...

(如果上面的思路描述你沒看懂也沒關係,看下面的圖解)

圖解

第一輪:在6個元素中找到最小的元素1,與第一個位置的元素交換位置
​​​​

如何找出最小的元素?第一個元素與相鄰的後一個元素比較大小(2<3)。找出兩者中較小的一個元素(2)繼續與下一個元素(1)比較,直到最後一個元素。這種依次比較的方式是不是跟之前說過的氣泡排序(Bubble Sort)很像,可以參考:高效理解排序之——氣泡排序-JAVA版

第六輪,只剩最後一個元素了,它既是最後一個元素中最小的元素,
也是所有元素中最大的元素,所有第六輪的比較可以省略。

 

看了這個圖解再回過頭看下思路,思路才是最重要的。

程式碼實現

java版本

import java.util.Arrays;
public class SelectionSort {
    public static void main(String []args) {
		int[] array = new int[]{2,3,1,6,4,5};
		sort(array);
		System.out.print(Arrays.toString(array));
    }
	
	public  static void sort(int[] array){
		for(int i=0; i < array.length-1; i++){
			int minIndex = i;
			for(int j = i+1;j < array.length; j++ ){
				minIndex = array[j] < array[minIndex] ? j : minIndex;
			}
			
			//可以新增判斷條件 i != minIndex時才替換
			//if(i == minIndex){continue;}
			int temp = array[i];
			array[i] = array[minIndex];
			array[minIndex] = temp;
				
			System.out.println("第"+(i+1)+"輪:"+Arrays.toString(array));
		}
	
	}
}

溫馨提示:千萬不要死記程式碼,很容易忘記,演算法思想遠比程式碼重要。

效率

時間複雜度: O(n^{2})  空間負責度: O(1)  穩定性:不穩定 

本章關鍵字總結:選擇  指定位置

 

 

相關文章