【排序算法】01选择排序

选择排序的核心是选择,即只比较,比较完成一轮确定一个数的最终位置之后再进行交换

算法简单描述

存在一个大小为n的无序数组,需要进行排序
第一轮:
第1个数分别和第2到n个数比较,记录最小值的坐标,全部比较完成之后,将最小值和第1个值交换
第二轮:
第2个数分别和第3到n个数比较,记录最小值的坐标,全部比较完成之后,将最小值和第2个值交换
。。。。。。。
第n-1轮:
比较低n-1和n,若n<n-1则交换

代码

    /**
     * 选择排序
     * @param nums
     * @return
     */
    private static int[] sortSelection(int[] nums){
        for(int i=0;i<nums.length-1;i++){
            int minIdx=i; //本轮最小值下标
            for(int j=i+1;j<nums.length;j++){
                if(nums[j]<nums[minIdx]){
                    minIdx = j;
                }
            }
           //将最小值交换到本轮第一个位置
            int num=nums[minIdx];
            nums[minIdx] = nums[i];
            nums[i]=num;
        }
        return nums;
    }

时间复杂度

一共需要进行 (n-1)+(n-2)+.......+3+2+1 次处理,根据等差数列求和公式可以算出来:(a1+an)n/2 即 n(n-1)/2 ,化简得O(n的平方)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容