算法与数据结构--选择排序

目录

1、选择排序的原理

2、过程分析

3、参考代码


1、选择排序的原理

  • 每次循环将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素
  • 循环第一条规则,找出最小值,放到第一位
  • 进行n-1轮比较,完成排序

    简单而言,每轮都找到最小的放到前面。举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:

          数组:   array={8 , 2 , 3 , 7 , 1}

          第1轮: array={1 | 8 , 3 , 7 , 2}

          第2轮: array={1 , 2 | 8 , 7 , 3}

          第3轮: array={1 , 2 , 3 | 8 , 7}

          第4轮: array={1 , 2 , 3 , 7 | 8}

2、过程分析

  • i 代表第一个数据的位置
  • j 代表后边每一个元素的位置
arrayijarray[i]array[j]array[i]>array[j][i]交换[j]
1
{8|2,3,7,1}[0][1]82TRUE8<->2
{2|8,3,7,1}[0][2]23FALSE--
{2|8,3,7,1}[0][3]27FALSE--
{2|8,3,7,1}[0][4]21TRUE2<->1
{1,8|3,7,2}
2
{1,8|3,7,2}[1][2]83TRUE8<->3
{1,3|8,7,2}[1][3]37FALSE--
{1,3|8,7,2}[1][4]32TRUE3<->2
{1,2,8|7,3}
3
{1,2,8|7,3}[2][3]87TRUE8<->7
{1,2,7|8,3}[2][4]73TRUE7<->3
{1,2,3,8|7}
4
{1,2,3,8|7}[3][4]87TRUE8<->7
{1,2,3,7|8}
结果
{1,2,3,7,8}
  • i 的取值范围是: 0 ~ < array.length - 1
  • j 的取值范围是: i + 1 ~ < array.length
  • 交换步骤如下:
        if (array[i] > array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }

3、参考代码

    public static void main(String[] args) {
        int[] array = {8 , 2 , 3 , 7 , 1};
        System.out.println(Arrays.toString(selectedSort(array)));
    }

    private static int[] selectedSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] > array[j]) {
                    int tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
        return array;
    }
    -----------输出结果-------------
    [1, 2, 3, 7, 8]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值