You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java新手编写数组升序排序算法遇错,求技术帮助

帮你搞定选择排序的代码问题

嘿,别慌!作为编程新手,第一次写排序逻辑遇到这些问题太正常了~咱们先从你提到的报错开始,再一步步把你的选择排序思路补全。

首先解决最直接的报错:variable x might not have been initialized

你只声明了int[] x;,但没有给这个数组分配内存空间哦!Java里引用类型(比如数组)必须初始化才能使用,你需要给它创建和原数组a一样长度的空间:

int[] x = new int[a.length];

另外,merker == x[0];这行是比较操作(==用来判断两边是否相等),而你想做的是把merker的值赋值给x的元素,应该用单等号=:

x[某个索引] = merker;

再来梳理你的选择排序逻辑漏洞

你的思路是对的——每次选出当前数组里的最小值放到新数组x,但还有几个关键逻辑没跟上:

  • 每次选完最小值后,要把原数组里的这个最小值“标记为已选”(比如设为一个极大值,避免下次重复选中)
  • 外层循环的n需要递减,不然会无限循环;同时内层循环的i每次要重置,不然只会遍历一次
  • 需要一个变量记录x数组当前要填充的位置,比如int currentIndex = 0;

修正后的完整代码

package com.company;
public class Main {
    public static void main(String[] args) {
        int[] a = {11,7,8,3,15,13,9,19,18,10,4};
        // 初始化x数组,长度和a一致
        int[] x = new int[a.length];
        // 记录x当前要填充的位置
        int currentIndex = 0;
        // 复制原数组到临时数组,避免修改原数组(也可以直接修改原数组)
        int[] temp = a.clone();
        int n = temp.length;

        while(n > 0){
            // 每次循环重置merker为当前temp数组的第一个元素
            int merker = temp[0];
            // 记录最小值的索引,方便后续标记为已选
            int minIndex = 0;
            int i = 1;
            while(i < n ) {
                if (temp[i] < merker){
                    merker = temp[i];
                    minIndex = i;
                }
                i++;
            }
            // 把最小值放到x数组的对应位置
            x[currentIndex] = merker;
            currentIndex++;
            // 将已选的最小值标记为极大值,下次不会再选中
            temp[minIndex] = Integer.MAX_VALUE;
            n--;
        }

        // 打印排序后的x数组
        System.out.println("排序后的数组:");
        for(int num : x){
            System.out.print(num + " ");
        }
    }
}

代码解释

  1. 我们用temp数组复制原数组a,这样不会修改原数组的内容;如果你不需要保留原数组,也可以直接操作a
  2. 每次外层循环中,先把merker设为当前temp数组的第一个元素,然后遍历找到更小的值,同时记录最小值的索引
  3. 找到最小值后,把它放到x的当前位置,然后把temp里的这个最小值改成Integer.MAX_VALUE(Java中int类型的最大值),这样下次遍历就不会再选到它
  4. 每次外层循环后n减1,直到n为0,所有元素都被选到x里

这样运行代码就能得到从小到大排序后的数组啦~

内容的提问来源于stack exchange,提问作者Laffa Yett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:43:27