数据结构与算法-排序算法-选择排序-笔记整理《八》

本文深入讲解了选择排序算法的基本思想及实现过程,通过一个具体的数组排序实例,详细演示了每一轮寻找最小值并进行交换的过程,帮助读者理解选择排序的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择排序思想

假设有一个数组,int[] arr = {2, 7, -1, 10, 19};

  1. 先假如数组第一个元素2为最小值,依次与剩下的元素进行比较,如果发现有元素比这个值更小就刷新最小值,第一轮结束后会找到本轮的最小值,然后让这个最小值与元素2进行交换。
  2. 第一个元素最小值确定之后,再假设第二个元素7为最小值,依次与-1,10,19如果中间发现有比7小的就刷新最小值,直到遍历完这个数组,让本轮最小值的元素与元素7进行交换
  3. 从第三个元素开始,发现依次找最小值,比较…第四第五个元素同上
  4. 依次到倒数第二个元素确定之后结束
    注意事项:如果发现最小值就是自己就不要进行交换操作

代码思想

int[] arr = {2, 7, -1, 10, 19};
        //第1轮
        int minIndex = 0;
        int min = arr[0];
        for (int j = 0 + 1; j < arr.length; j++) {
            if (min > arr[j]) { //说明假定的最小值,并不是最小
                min = arr[j]; //重置min
                minIndex = j; //重置minIndex
            }
        }
        if (minIndex != 0) {//最小值如果是自己的话不进行交换
            arr[minIndex] = arr[0];
            arr[0] = min;
        }
        System.out.println(Arrays.toString(arr));

        //第2轮
        minIndex = 1;
        min = arr[1];
        for (int j = 1 + 1; j < arr.length; j++) {
            if (min > arr[j]) { // 说明假定的最小值,并不是最小
                min = arr[j]; // 重置min
                minIndex = j; // 重置minIndex
            }
        }
        if (minIndex != 1) {//最小值如果是自己的话不进行交换
            arr[minIndex] = arr[1];
            arr[1] = min;
        }

        System.out.println(Arrays.toString(arr));

        //第3轮
        minIndex = 2;
        min = arr[2];
        for (int j = 2 + 1; j < arr.length; j++) {
            if (min > arr[j]) { // 说明假定的最小值,并不是最小
                min = arr[j]; // 重置min
                minIndex = j; // 重置minIndex
            }
        }
        if (minIndex != 2) {//最小值如果是自己的话不进行交换
            arr[minIndex] = arr[2];
            arr[2] = min;
        }
        System.out.println(Arrays.toString(arr));

        //第4轮
        minIndex = 3;
        min = arr[3];
        for (int j = 3 + 1; j < arr.length; j++) {
            if (min > arr[j]) { // 说明假定的最小值,并不是最小
                min = arr[j]; // 重置min
                minIndex = j; // 重置minIndex
            }
        }
        if (minIndex != 3) {//最小值如果是自己的话不进行交换
            arr[minIndex] = arr[3];
            arr[3] = min;
        }
        System.out.println(Arrays.toString(arr));

最终版本

  int[] arr = {2, 7, -1, 10, 19};
        for (int i=0;i<arr.length-1;i++){
            int minIndex = i;
            int min = arr[i];
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]) { // 说明假定的最小值,并不是最小
                    min = arr[j]; // 重置min
                    minIndex = j; // 重置minIndex
                }
            }
            if (minIndex != i) {//最小值如果是自己的话不进行交换
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
            System.out.println(Arrays.toString(arr));
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值