每次从一堆元素中找出最大的元素,然后和最尾部的元素交换,执行完一轮后最尾部的元素就是最大值,然后重复执行以上步骤。
代码:
public static void sort(int[] array) {
for (int end = array.length - 1; end > 0; end--) {
int maxIndex = 0;
for (int begin = 1; begin <= end; begin++) {
if (array[begin] > array[maxIndex]) {
maxIndex = begin;
}
}
int tmp = array[end];
array[end] = array[maxIndex];
array[maxIndex] = tmp;
}
}
总结:平均时间复杂度为O(n2),空间复杂度为O(1)
选择排序的交换次数远远少于冒泡排序(我的之前文章冒泡排序),平均性能优于冒泡排序。
其实选择排序还可以优化,使用二叉堆来查找最大值。