簡單選擇排序
阿新 • • 發佈:2020-11-14
簡單選擇排序是選擇排序的一種,下面是選擇排序的一些特徵:
- 時間複雜度,最好最壞平均都為:O(n^2)
- 空間複雜度,最好最壞平均都為:O(1)
- 是否穩定:不穩定
每次排序都將一個元素放到最總位置上,第k次排序,放第k大的元素到最終位置上
簡單選擇排序的基本思想:每次選擇剩餘元素中最小(大)的元素放到排好的序列最後(前),知道剩餘元素為0。
下面是簡單選擇排序的程式碼:
/** * arr 陣列首地址 * len 陣列長度 */ void select_sort(int *arr, int len) { int i, j; for (i=0; i<len-1; i++) { // 把len個元素中較小的len-1個元素排好序後,那len個元素就排好序了 int min = i; for (j=i+1; j<len; j++) if (arr[j]<arr[min]) min = j; if (min!=i) swap(arr+i, arr+min); // 交換兩個元素的位置 } }
測試程式碼,可直接複製後編譯執行:
#include <stdio.h> void show(int *arr, int len); void select_sort(int *arr, int len); void swap(int *px, int *py); int main() { int len = 7; int arr[] = {7, 10, 11, 9, -8, 2, 27}; select_sort(arr, len); show(arr, len); return 0; } /** * 交換兩個元素的值 */ void swap(int *px, int *py) { int temp = *px; *px = *py; *py = temp; } /** * arr 陣列首地址 * len 陣列長度 */ void show(int *arr, int len) { int i; for (i=0; i<len; i++) { printf("%4d", arr[i]); } printf("\n"); } /** * arr 陣列首地址 * len 陣列長度 */ void select_sort(int *arr, int len) { int i, j; for (i=0; i<len-1; i++) { // 把len個元素中較小的len-1個元素排好序後,那len個元素就排好序了 int min = i; for (j=i+1; j<len; j++) if (arr[j]<arr[min]) min = j; if (min!=i) swap(arr+i, arr+min); // 交換兩個元素的位置 } }