算法之選擇排序法

選擇排序法(Selection Sort)

一,概念

自行總結:從愈來愈小的選擇區間中選擇一個最小(大)的值,和選擇區間最前面的值交換位置,直到排序完成javascript

二,圖示

在這裏插入圖片描述

三,C++實現

#include <iostream>

using namespace std;

void selectionSort(int arr[], int n){
    // 一層循環,縮小尋找最小值的區間範圍
    for(int i = 0; i < n; i ++){
        // 二層循環,尋找[i, n)區間裏的最小值的index
        int minIndex = i;
        for( int j = i + 1; j < n; j ++ ){
            if( arr[j] < arr[minIndex])
                minIndex = j;
        }
        // 二層循環完畢,區間最小值和區間第一交換位置,放到區間最前面
        // swap函數,進行交換
        swap(arr[i], arr[minIndex]);
    }
}

int main() {

    int a[10] = {10,9,8,7,6,5,4,3,2,1};
    selectionSort(a, 10);
    for ( int i = 0; i < 10; i ++ )
        cout<<a[i]<<" ";
    cout<<endl;

    return 0;
}

注:對於c++實現,整數,浮點和字符串數組可經過寫泛型參數實現,而集合數組則須要寫類實現(之後再研究代碼吧)java

四,js實現

function selectionSort(arr, n){
    // 一層循環,縮小尋找最小值的區間範圍
    for(let i = 0; i < n; i++){
        // 二層循環,尋找[i, n)區間裏的最小值的index
        let minIndex = i;
        for(let j = i+1; j < n; j++){
            if(arr[j]<arr[minIndex]){
                minIndex = j;
            }
        }
        // 二層循環完畢,區間最小值和區間第一交換位置,放到區間最前面
        // es6解構賦值,進行交換
        [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
    return arr;
}
selectionSort([10,9,8,7,6,5,4,3,2,1],10);
selectionSort([10,9,8,7,6,5,4,3,2,1],10);
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
selectionSort([5.5,4.5,3.5,2.5,1.1],5);
(5) [1.1, 2.5, 3.5, 4.5, 5.5]
selectionSort(['d','a','f','c','b'],5);
(5) ["a", "b", "c", "d", "f"]

注:對於js實現,整數,浮點和字符串數組均可通用,而集合數組則取具體屬性比較即可用ios

相關文章
相關標籤/搜索