选择排序思想:
在一个乱序的数组中,每循环一轮数组的元素,找到一个最大的元素,放到数组尾部,并且排除刚找到的最大的,继续对前面的其他元素进行分析,每一轮都找它们的最大值
每一次让数组中的最大值和end值交换,end依次减小
上模板:
for(int end = array.length-1;end > 0;end --){
int max = 0;
for(int begin = 1;begin <= end;begin ++){
if(array[max] < array[begin]){
max = begin; // 这里记录的是下标
}
}
int tmp = array[max];
array[max] = array[end];
array[end] = tmp;
}
还有一种思路就是和刚才那个是相反的,是每一次比较之后,把最大的放在数组头部,依次进行下去
每一次让数组中的最大值和begin值交换,begin依次增大
上模板:
for(int i = 0;i < array.length;i ++){
int max = i;
for(int begin = i+1; begin < array.length;begin ++){
if(a[max] < a[begin]){
max = begin;
}
}
int tmp = a[max];
a[max] = a[i];
a[i] = tmp;
}
关于选择排序还有一个注意的地方就是,它的稳定性,严格来说他其实是不稳定的
例如:一个乱序序列 10 6 8 6
相对位置发生改变,则说明是不稳定的,另外它的时间复杂度无论是最好还是最坏都是O(n^2)级别的
少一些功利主义的追求,多一些不为什么的坚持!