選擇排序(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(1),未用額外輔助空間。是否穩定看具體的代碼實現方法。上面的代碼實現是穩定的。