選擇排序
參考本文對選擇排序的一些提示,在星球內記錄代碼及思考過程。
選擇排序是一種簡單直觀的排序算法,無論什麼數據進去都是 O(n²) 的時間複雜度。所以用到它的時候,數據規模越小越好。唯一的好處可能就是不佔用額外的內存空間了吧。
算法步驟
-
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
-
再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
-
重複第二步,直到所有元素均排序完畢。
例子
這種排序的最大優勢就是省去了多餘的元素交換,冒泡排序是看見小的就交換,選擇排序是在剩下的數列中找最小的交換。
代碼
void selectSort(int array[])
{
for(int i=0; i<array.length-1; i++)
{
int minIndex= i;
for(int j=i+1; j<array.length; j++)
{
// 找出最小元素的位置
minIndex = array[minIndex]<array[j] ? minIndex : j;
}
// 交換
int tem = array[i];
array[i] = array[minIndex];
array[minIndex] = tem;
}
}
選擇排序存在一個明顯問題,就是它的不穩定性。也就是說,當數列包含多個值相等的元素時,選擇排序有可能打亂它們的原有順序。