排序算法之簡單選擇排序
基本思想
在一組元素中選擇具有最小排序碼的元素,若它不是這組元素中的第一個元素,則將它與這組元素中的第一個元素對調;在未排序的剩下的元素中反復運行以上步驟,直到剩余元素僅僅有一個為止。
代碼
private void selectSort(int[] a, int left, int right) {
for (int i = left; i < right; i++) {
int k = i;
int temp;
for (int j = i + 1; j <= right; j++) {
if (a[j] < a[k])
k = j;
}
if (k != i){
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
性能分析
- 時間復雜度
簡單選擇排序的排序碼比較次數KCN 與元素的初始排列無關。第i趟選擇具有最小排序碼元素所需的比較次數總是
n?i?1 次,如果整個待排序元素序列有n個元素。因此總的排序碼比較次數為
KCN=∑m=0n?2(n?i?1)=n(n
元素的移動次數與元素序列的初始排列有關。在最好情況下。即當初始序列為有序時,無需移動元素;在最壞的情況下,即每一趟都要進行元素交換。所以平均情況下的時間復雜度為
O(n2) 。 - 穩定性
簡單選擇排序是一種不穩定的排序方法。
排序算法之簡單選擇排序