選擇排序也是一種很直觀的排序方法,它從無序區裏 選擇 一個元素,與無序區中的第一個元素交換位置。算法
在咱們的平常生活中,其實也常用選擇排序,下面以擺放俄羅斯套娃爲例。bash
在擺放時,咱們將套娃劃分爲兩個區:有序區和無序區。有序區的套娃已是按順序排列的,而每次要擺放新的套娃時,咱們在無序區中選擇一個最小的套娃,與無序區的第一個套娃交換位置。spa
進行到無序區只有最後兩個元素時,排完這一趟即宣告結束。3d
使用天然語言能夠描述以下:code
從第一個套娃開始,直到倒數第二個套娃:
找到最小的套娃;
與此輪遍歷開始的套娃交換位置;
複製代碼
能夠用一張簡單的圖表示選擇排序:cdn
使用 C 語言實現以下:blog
void SELECTSORT(int dolls[], int totalOfDolls) {
for (int i = 0; i < totalOfDolls - 1; i++) {
int minDosPos = i;
for (int j = i; j < totalOfDolls; j++) {
if (dolls[j] < dolls[minDosPos]) {
minDosPos = j;
}
}
if (minDosPos != i) {
int temp = dolls[i];
dolls[i] = dolls[minDosPos];
dolls[minDosPos] = temp;
}
}
}
複製代碼
對於 n 個元素的序列,選擇排序一共須要 n - 1 趟排序。排序
只須要一個輔助空間,即 minDosPos,空間複雜度爲 O(1)。it
能夠發現,不管套娃的初始狀況如何,選擇排序法每一趟始終要進行 n - i 次元素的比較,因此元素的比較總次數爲 。io
這說明 選擇排序法所進行的元素之間的比較次數與原始狀態無關。
由上可知,時間複雜度爲 O()。
選擇排序中,相同大小的元素在被選擇時,處在前面的元素極可能在選擇時被置換到後面去,仔細觀察上文套娃的例子,一樣大小的套娃在擺放後相對順序發生了改變,因此選擇排序是 不穩定排序算法。