一、基本思想
每次從未排序的序列中挑選出最大(最小)的元素,重複這個過程直到所有元素都被挑完。
二、算法實現
// 選擇排序算法
void selectSort(int* arr, int len) {
int min, minPos;
for (int i = 0; i < len; i++) {
min = arr[i];
minPos = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < min) {
min = arr[j];
minPos = j;
}
}
arr[minPos] = arr[i];
arr[i] = min;
}
}
三、算法分析
選擇排序算法時間複雜度爲O(n^2),空間複雜度爲O(1).
選擇排序是非常慢的,即使是在最好的情況下(如數組已經有序)都需要二次方時間,該算法重複的進行幾乎相同的工作,而不會從每次迭代中學習到什麼東西。