簡單選擇排序算法(Simple Selection Sort)

簡單選擇排序算法(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;

  1. minValueOfIndex=0,j=1時,array[minValueOfIndex]>array[j],2>6爲false,minValueOfIndex=0值不變。
    在這裏插入圖片描述
  2. minValueOfIndex=0,j=2時,array[minValueOfIndex]>array[j],2>0爲true,更新minValueOfIndex=j,注意:這裏沒有交換2和0的位置,只是使用minValueOfIndex變量記錄值0的index。
    在這裏插入圖片描述
  3. minValueOfIndex=2,j=3時,array[minValueOfIndex]>array[j],0>7爲false,minValueOfIndex=2值不變。
    在這裏插入圖片描述
  4. minValueOfIndex=2,j=4時,array[minValueOfIndex]>array[j],0>2爲false,minValueOfIndex=2值不變。
    在這裏插入圖片描述
  5. 第二層for循環結束後,minValueOfIndex=2,指向值0,如果變量i不等於minValueOfIndex,說明變量i指向的不是最小值,故將i和minValueOfIndex指向的值進行交換位置。
    在這裏插入圖片描述
  6. 第一層的其它次數輪詢依次類推。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章