选择排序(selection sort)

2022-08-16  本文已影响0人  水中的蓝天
10大排序算法.png

选择排序的交换次数要远远少于冒泡排序,平均性能优于冒泡排序
最好最坏平均时间复杂度:O(n^2) 空间复杂度:O(1) 属于稳定排序

选择排序的执行流程:

  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;
}

思考:选择排序是否有优化空间 ?
可以使用堆来选择最大值

上一篇下一篇

猜你喜欢

热点阅读