基本思想:
第一轮从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置。
第二轮再从剩余的未排序元素中寻找到最小(大)元素,然后放到序列的第二个位置。此时,前两个位置成为已排序区。
继续进行,从剩余的未排序元素中寻找到最小(大)元素,放到已排序的序列的下一个位置。以此类推,最后全部待排序的数据元素的个数为零。
排序代码:
public void selectionSort() {
int[] befArrays = {3, 5, 1, 4, 12, 18, 19, 20, 9, 3, 15, 7, 0};
int length = befArrays.length;
for (int i=0; i<length-1; i++) {
int location = i;
for (int j=i+1; j<length; j++) {
if (befArrays[j] < befArrays[location]) {
location = j;
}
}
if (location != i) {
int swap = befArrays[location];
befArrays[location] = befArrays[i];
befArrays[i] = swap;
}
}
for (int i=0; i<length; i++) {
System.out.printf(befArrays[i] + "\t");
}
}
时间复杂度
最优 O(n²)
最坏 O(n²)
平均 O(n²)
空间复杂度 O(1)
概述:无论是最优或者最坏情况下,算法的复杂度都是O(n²),相比其他排序算法,复杂度较高。同时,选择排序也是一种不稳定的排序方法。
网友评论