2201_75522764 2024-03-04 15:43 采纳率: 100%
浏览 5
已结题

Java选择排序,有个问题

为什么必须把begin赋给a才行,begin赋给a不也是给的0值吗,但写0就报错了,为什么啊

img

  • 写回答

4条回答 默认 最新

  • a5156520 2024-03-04 19:02
    关注

    上面的代码,主要思路应该是通过逐个将数组每个元素的值与其后面的元素比较,逐次将当前最小的值与前面的元素进行交换,来达到排序的目的的。

    测试如下:

    package com.company;
    
    public class lx8 {
    
        public static void main(String[] args) {
            
            int a[] = {2,9,5,0,1,3,6,8};
            int begin=0;  // 循环遍历begin初始赋值为0
            int end = a.length-1;  // 循环最大到下标a.length-1
            
            while(begin<end) {  // 当循环变量begin小于数组最大下标(a.length-1)时,不断比较和排序数组,当大于等于数组最大下标(a.length-1)时停止循环
                
                int min=a[begin];  // 默认数组当前最小值的值为循环变量begin对应下标的数组元素的值
                int t=begin;       // 默认数组当前最小值下标为循环变量begin的值
                
                // 这里从循环变量begin开始的下标,直到数组最后一个下标结束
                // 如果这里i改为0,会将前面比较过的数组元素再比较一次,从而导致出错
                // 所以,这里需要将i改为从当前循环变量begin开始的下标开始,前面比较过的元素就不再继续参与比较
                for(int i=begin;i<a.length;i++) {  
                    if(min>a[i]) {  // 如果当前元素的值比最小值小,则将最小值min赋值为当前元素的值,最小值下标赋值给t
                        min=a[i];
                        t=i;
                    }
                }
                
                // 将下标t的元素值赋值为当前比较的下标begin的元素(前面的元素),如果t的值改变了,则下标t中的元素是从下标begin开始到后面结束的元素中的最小值(t为后面的元素)
                a[t]=a[begin];  
                // 这里将前面比较的元素(begin下标中的元素)值赋值为数组当前最小值min
                // 这里执行的两步交换,起到排序的作用
                a[begin]=min;   
                // 循环变量begin指向下个下标
                begin++;  
                
                
            }
            
            // 打印排序后数组元素值
            for(int i=0;i<a.length;i++) {
                System.out.print(a[i]+" ");
            }
            
        }
    
    }
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop
  • ¥15 共享文件夹会话中为什么会有WORKGROUP
  • ¥15 关于#python#的问题:使用ATL02数据解算光子脚点的坐标(操作系统-windows)
  • ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据
  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题