选择排序

选择排序动图
选择排序动图

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。

package com.example.leetcode.easy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;

/**
 * 选择排序
 * @author LiPeng01
 * @since 2021/2/26 2:23 下午
 */
public class Choice {
    public static void main(String[] args) {
        int[] num = {3,2,1};
        choose(num);
        Logger logger = LoggerFactory.getLogger(Bubble.class);
        logger.info(Arrays.toString(num));
    }

    /**
     * 首先在未排序序列中找到最小元素,存放到排序序列的起始位置。
     * 再从剩余未排序元素中继续寻找最小元素,然后放到未排序的起始位置。
     * 重复第二步,直到所有元素均排序完毕。
     *
     * @param nums
     */
    public static void choose(int[] nums) {
        //以第i个元素为基础,n-1轮
        for (int i = 0; i < nums.length-1; i++) {
            int min = i;
            //从第i+1个元素开始对比,n-1次
            for (int j = i+1; j < nums.length ; j++) {
                if(nums[j] < nums[min]) {
                    //记录最小下标
                    min = j;
                }
            }
            swap(nums,i,min);
        }
    }
    public static void swap(int[] nums, int i, int j) {
        int a = nums[i];
        nums[i] = nums[j];
        nums[j] = a;
    }
}

posted @ 2021-02-26 14:34  澎拜编程  阅读(47)  评论(0)    收藏  举报