常用排序算法之簡單選擇排序

原理:

將數據分爲有序區和無序區,從無序區中選擇最小(或最大)的元素與有序區中的元素進行交換,循環直到整個排序結束。

講解:

設數組爲array[0...n-1].

1. 初始時有序區爲array[i=0],i = 0 ... n-2 ,設定數組最小值的小標爲minIdx = i ,從j=i+1...n-1中一個個與array[i]進行比較,如果array[j] < array[i],設置minIdx = j ;

2. 如果i != minIdx ,則將array[i] 與 array[minIdx]進行交換 ;

4. i++ ,循環第1、2步,直到 i = n -1 時結束整個排序過程;

 

實例:

現有數組[6,2,4,1,9,5],要求對其進行升序排序。

1. 初始時:有序區爲array[0],i = 0 , minIdx = i =0, j = i+1...n-1=1、2、3、4、5 ;

2. 元素array[j=1] < array[minIdx=0] ,設置minIdx = 1 ,j++; 

3. 元素array[j=2] > array[minIdx =1] , minIdx 不變,j++ ;

4. 元素array[j=3] < array[minIdx=1], minIdx = 3,j++ ;

5.元素array[j=4] > array[minIdx=3],minIdx不變,j++ ;

6.元素array[j=5] > array[minIdx=3],minIdx不變,j++ ;

7. j 不小於array.length-1,第一次循環結束 ,將array[i=0]與array[minIdx=3]元素進行交換,得到第一輪排序後的結果:[1,2,4,6,9,5];

8. i++,循環1-7步,直到i = n-1 = 5時結束;

程序:

/**
 * 簡單選擇排序
 * @param array
 */
public static void selectSort(int[] array){
	int i,j,minIdx,tmp ;
	for(i = 0;i< array.length - 1;i++){
		minIdx = i ;
		for(j = i+1;j<array.length;j++){
			if(array[j] < array[minIdx]){
				minIdx = j ;
			}
		}
		if(minIdx != i){
			tmp = array[i] ;
			array[i] = array[minIdx] ;
			array[minIdx] = tmp ;
		}
	}
}


 

 

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