一、基本思想
每次从未排序的序列中挑选出最大(最小)的元素,重复这个过程直到所有元素都被挑完。
二、算法实现
// 选择排序算法
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).
选择排序是非常慢的,即使是在最好的情况下(如数组已经有序)都需要二次方时间,该算法重复的进行几乎相同的工作,而不会从每次迭代中学习到什么东西。