選擇排序(Selection Sort)-Java實現

選擇排序(Selection Sort)算法簡介:

  選擇排序是利用逐個選擇的方式進行排序,逐個選擇出數組中的最小(或最大)的元素,順序放在已排好序的序列後面,直到全部記錄排序完畢。

選擇排序(Selection Sort)算法原理:

例如我們有一個數組,我們需要把較小的元素排在前面,把較大的元素排在後面,那麼需要選擇出最小元素並將其排在序列最前:

  • 從待排序列中選出最小(或最大)的一個元素,記錄其下標的位置;
  • 將記錄的下標值與待排序列的第一個元素進行交換;
  • 以此類推,直到全部待排序列的元素排完。

舉例說明:

現在需要對數組序列 6 1 7 8 9 3 5 4 2 運用選擇排序算法從小到大排序。

第一輪:最小元素爲1,把1放在首位,也就是1和6互換位置:1 6 7 8 9 3 5 4 2 

第二輪:將排序好的元素以外的序列6 7 8 9 3 5 4 2進行比較,最小元素爲2,將2與第二位的6互換位置:1 2 7 8 9 3 5 4 6 

第三輪:將排序好的元素以外的序列7 8 9 3 5 4 6 進行比較,最小元素爲3,將3與第三位的7互換位置:1 2 3 8 9 7 5 4 6 

.................

第n輪:重複同樣的操作直到所有數字都歸位爲止,排序完成。

選擇排序(Selection Sort)代碼實現:

public class Demo {
 
	public static void main(String[] args) {
		int[] array= {6,1,7,8,9,3,5,4,2};
		int[] newarray=selectionSort(array);
		for(int arr:newarray) {
			System.out.print(arr+" ");
		}
	}
	public static int[] selectionSort(int[] array){
		//外層循環,控制選擇的次數
		for(int i=0;i<array.length-1;i++) {
			int min_index=i;
			//內存循環
			for(int j=i+1;j<array.length;j++) {
				if(array[j]<array[min_index]) {
					min_index=j;
				}
			}
			if(min_index!=i) {
				int temp=array[i];
				array[i]=array[min_index];
				array[min_index]=temp;
			}
		}
		return array;
	}
}

選擇排序(Selection Sort)的時間複雜度:

選擇排序使用了線性查找來尋找最小值,因此在第1輪中需要比較n-1個數字,第2輪需要比較n-2個數.....到第n-1輪的時候就只需比較1個數字了。因此,總的比較次數與冒泡排序的相同,都是(n-1)+(n-2) +...+1≈n²/2次。每輪中交換數字的次數最多爲1次。如果輸入數據就是按從小到大的順序排列的,便不需要進行任何交換。選擇排序的時間複雜度也和冒泡排序的一樣,都爲O(n²)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章