排序演算法---選擇排序
阿新 • • 發佈:2018-12-10
參考網址:https://www.cnblogs.com/onepixel/articles/7674659.html 選擇排序(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趟結束,陣列有序化了。
程式碼如下:
using namespace std; // 分類 -------------- 內部比較排序 // 資料結構 ---------- 陣列 // 最差時間複雜度 ---- O(n^2) // 最優時間複雜度 ---- O(n^2) // 平均時間複雜度 ---- O(n^2) // 所需輔助空間 ------ O(1) // 穩定性 ------------ 不穩定 void Swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } void SelectionSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { int min_index = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min_index]) { min_index = j; } } Swap(arr, i, min_index); } } int main() { int arr[] = { 5, 0, 2, 6, 9, 4, 1, 3, 8 }; int n = sizeof(arr)/sizeof(int); SelectionSort(arr, n); for (int i = 0; i < n; i++) { cout << arr[i] << endl; } return 0; }