圖解選擇排序(Selection Sort)

選擇排序(Selection Sort)

選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

算法描述

n個記錄的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。具體算法描述如下:

  • 初始狀態:無序區爲R[1..n],有序區爲空;
  • 第i趟排序(i=1,2,3…n-1)開始時,當前有序區和無序區分別爲R[1..i-1]和R(i..n)。該趟排序從當前無序區中-選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R[i+1..n)分別變爲記錄個數增加1個的新有序區和記錄個數減少1個的新無序區;
  • n-1趟結束,數組有序化了。

動圖演示

 

代碼實現

void selectionSort(vector<int> &v)
{
    int size = v.size();
    for (int i = 0; i < size - 1; ++i) {
        for (int j = i + 1; j < size; ++j) {
            if (v[i] > v[j]) {
                swap(v[i], v[j]);// 每次都把較小的數放前面,等價於選擇一個最小的數
            }
        }
    }
}

算法分析

平均時間複雜度爲O(n^{2}),最壞時間複雜度爲O(n^{2}),最好時間複雜度爲O(n^{2})。空間複雜度爲O(1),未用額外輔助空間。是否穩定看具體的代碼實現方法。上面的代碼實現是穩定的。

 

 

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