直接選擇排序(Straight Select Sort)是一種典型的選擇排序算法,通過不斷選擇序列中最大(小)的元素。
一、算法基本思想
(1)基本思想
直接選擇排序的基本思想就是:不斷從未排序隊列中選擇最大(小)的元素放到已排序隊列隊尾,直至所有元素都排好序。
(2)運行過程
直接選擇排序算法的運作如下:
1、首先在原始序列中找到最小(大)元素,存放到排序序列的起始位置
2、再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
3)重複第二步,直到所有元素均排序完畢。
(3)示例
二、算法實現(核心代碼)
C++實現:
void selection_sort(int arr[], int len) { int i, j, min; for (i = 0; i < len - 1; i++) { min = i; for (j = i + 1; j < len; j++) if(arr[min] > arr[j]) min = j; swap(arr[i], arr[min]); } }
Java實現:
public void selection_sort(int[] arr) { int i, j, min, temp, len = arr.length; for (i = 0; i < len - 1; i++) { min = i; for (j = i + 1; j < len; j++) if (arr[min] > arr[j]) min = j; temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } }
三、性能(算法時間、空間複雜度、穩定性)分析
直接選擇排序平均時間複雜度爲O(n^2);空間複雜度爲O(1);是不穩定的排序算法。
原始序列: 21,25,49,25*,16,08
排序後:08,16, 21,25*,25,49
兩個25的位置變化了,所以是不穩定的。