簡單選擇排序演算法
(1)演算法介紹
簡單選擇排序採用最簡單的選擇方式,從頭到尾順序掃瞄序列,找出最小的乙個記錄,和第乙個記錄交換,接著從剩下的記錄中繼續這種選擇和交換,最終使序列有序。
(2)執行過程
下面舉例說明簡單選擇排序的執行過程:
原始序列:3 5 2 9 7 8 4 1 6 10
在選擇排序的過程中,把整個序列分為有序部分(綠色)和無序部分(紅色)。開始時,整個序列為無序序列,如下所示:
進行第一趟排序,從無序序列中選取乙個最小的元素1,使其與無序序列中的第乙個元素交換,則此時產生了僅含有乙個元素的有序序列,而無序序列中的元素減少1,如下所示:
進行第二趟排序,從無序序列中選取乙個最小的元素2,使其與無序序列中的第乙個元素交換,則此時產生了僅含有兩個元素的有序序列,而無序序列中的元素減少1,如下所示:
重複上述步驟,知道無序序列中的元素變為0個為止。
**實現如下:
#include #include using namespace std;
//簡單選擇排序演算法,時間複雜度為o(n*n),空間複雜度為o(1)
void selectsort(vector&r)
//將最小元素與無序序列第乙個元素交換
temp = r[k];
r[k] = r[i];
r[i] = temp; }}
void main()
; selectsort(r);
for (auto x:r)
cout << x << " ";
cout << endl;
}
執行結果如下:
複雜度分析
(1)時間複雜度
最好情況,序列有序,時間複雜度為o(n);
最壞情況,序列逆序,時間複雜度為o(n^2);
平均時間複雜度為o(n^2)
(2)空間複雜度
需要額外的輔助變數temp,因此空間複雜度為o(1).
排序演算法之簡單選擇排序
簡單選擇排序演算法,它的概念就是在要排序的一組數中,選出最小 或者最大 的一 個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後 乙個數 比較為止。這個演算法是很容易理解的,那麼,直接上 最下面的乙個...
排序演算法之簡單選擇排序
學習 輕鬆學演算法 簡單選擇排序 簡單選擇排序的思想很簡單,假設我們要從小到大排序,那麼我們可以這樣 從未排序的數列中找到最小的數,放在第乙個位置,讓原來在第乙個位置上的數放到最小數的位置,那麼第乙個位置上就是最小數,他是有序的。接著在剩下的未排序的數列中,再找到最小數,放在第二個位置,讓原來第二個...
排序演算法之簡單選擇排序
演算法思路 這個真的是超級簡單的演算法,從陣列起點開始,每次迴圈都確定陣列的乙個空間存什麼,裡面的巢狀迴圈 每次都要遍歷未排序的部分來找到最小的數字,退出這個小迴圈後,將這個最小值放到當前操作的陣列下標中。package choice 簡單排序演算法 思路 從每個點開始算起,將每個點與後面的點比較選...