选择排序的交换次数要远远少于冒泡排序,平均性能优于冒泡排序
最好最坏平均时间复杂度:O(n^2) 空间复杂度:O(1) 属于稳定排序
选择排序的执行流程:
- 从序列中找出最大的那个元素,然后与末尾的元素交换位置; 执行完一轮后,最末尾的那个元素就是最大的元素
2.忽略1中曾经找到的最大元素,重复执行步骤1
int[] list = {1,3,2,5,4,30,10,44,67,33};
int length = list.length - 1;
//end只需要大于0即可,因为剩下最后一个不需要再比
for(int end = length; end > 0;end--) {
int max = 0;
for(int begin = 1;begin <= end;begin++) {
if(list[max] <= list[begin] ) {
max = begin;
}
}
//交换 max 和 end 位置的元素
int tmp = list[max];
list[end] = list[max];
list[max-1] = tmp;
}
思考:选择排序是否有优化空间 ?
可以使用堆来选择最大值
网友评论