簡單選擇排序算法(Simple Selection Sort)
此排序算法是將元素與其它元素依次比較,如果反序,則記錄最小值或最大值對於的索引(index),等第二層for循環完畢後在根據最大值或最小值的索引所指向的值和i(第一層for循環的變量)指向的值進行互換位置。
此算法最大的特點是減少了排序元素交互位置的操作,提高了效率。
我們來看一下此算法的定義:簡單選擇排序就是通過n-i次關鍵字之間的比較,從n-i+1個記錄中選出關鍵字最小(或最大)的記錄,並和第i(i<=i<=n)個記錄交換之。
java代碼實現
/**
* 簡單選擇排序算法
*
* @param array
* @return
*/
public static int[] selectSort(int[] array) {
int i, j;
int minValueOfIndex;
for (i = 0; i < array.length; i++) {
minValueOfIndex = i;
for (j = i + 1; j < array.length; j++) {
if (array[minValueOfIndex] > array[j]) {
minValueOfIndex = j;
}
}
if (minValueOfIndex != i) {
int temp = array[i];
array[i] = array[minValueOfIndex];
array[minValueOfIndex] = temp;
}
}
return array;
}
JavaScript代碼實現
function selectSort(array){
var i,j;
var minValueOfIndex;
for(i=0;i<array.length;i++){
minValueOfIndex = i;
for(j=i+1;j<array.length;j++){
if(array[minValueOfIndex]>array[j]){
minValueOfIndex = j;
}
}
if(minValueOfIndex!=i){
var temp = array[minValueOfIndex];
array[minValueOfIndex]=array[i];
array[i]=temp;
}
}
}
function main(){
var array = [2, 6, 0, 7, 2];
console.log("arra:",array);
selectSort(array);
console.log("arra:",array);
}
main();
輸出結果:
輸入:[2, 6, 0, 7, 2]
輸出:[0, 2, 2, 6, 7]
我們來推導一下執行過程,第一層for循環:i=0;第二層for循環:j=i+1;minValueOfIndex=i;
- minValueOfIndex=0,j=1時,array[minValueOfIndex]>array[j],2>6爲false,minValueOfIndex=0值不變。
- minValueOfIndex=0,j=2時,array[minValueOfIndex]>array[j],2>0爲true,更新minValueOfIndex=j,注意:這裏沒有交換2和0的位置,只是使用minValueOfIndex變量記錄值0的index。
- minValueOfIndex=2,j=3時,array[minValueOfIndex]>array[j],0>7爲false,minValueOfIndex=2值不變。
- minValueOfIndex=2,j=4時,array[minValueOfIndex]>array[j],0>2爲false,minValueOfIndex=2值不變。
- 第二層for循環結束後,minValueOfIndex=2,指向值0,如果變量i不等於minValueOfIndex,說明變量i指向的不是最小值,故將i和minValueOfIndex指向的值進行交換位置。
- 第一層的其它次數輪詢依次類推。