有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

该算法试图在java中实现选择排序,但结果是错误的

我编写这段代码是为了实现选择排序,但由于某些原因,它不能按预期工作

确切地说,我唯一的问题是,在我找到第一个min之后,程序会一直重复该min。所以,如果最小值是15,我会在每个元素中得到15

提前谢谢你的帮助

for(count=0;count<sort.length;count++){          
        min = 100;
        for (counter=0;counter<sort.length;counter++){
            if(sort[counter]<min ){
                //&& sort[counter]>lastMin;
                min = sort[counter];
                elementNumber = counter;
            }
        }
        temp = sort[count];
        sort[count] = min;
        sort[elementNumber] = temp;
    }

经过一些修改后,代码现在看起来如下所示:

for(count=0;count<sort.length;count++){          
        min = sort[count];         
        for (counter=(count + 1);counter<sort.length;counter++){
            if(sort[counter]<min ){
                min = sort[counter];
                elementNumber = counter;
            }
        }
        temp = sort[count];
        sort[count] = min;
        sort[elementNumber] = temp;
    }

现在发生的是,我有时会在排序列表中得到重复项


共 (2) 个答案

  1. # 1 楼答案

    当您用以下行覆盖位置处的条目时,count

    sort[count] = min;
    

    您将丢失该索引处数组的先前内容

    您需要跟踪最小值的位置,并执行交换

  2. # 2 楼答案

    有几个大问题

    1. 不要将min初始化为100,将其初始化为 剩余数据:sort[count]

    2. 对于外部循环的每次迭代,从 count + 1然后从那里开始,看看你是否能找到什么 小于当前最小值。从0开始,您将继续查找 整个数组中的最小值,而不是 数组的其余部分

    3. 找到剩余数据的最小值后,应交换它 用sort[count]。赋值将过去的值吹走 在sort[count]。这一点,再加上第2点,就是为什么你一直得到相同的值 在输出中重复