试图在java中实现选择排序但结果出错了

时间:2014-02-11 17:28:51

标签: java algorithm sorting

我已编写此代码以实现选择排序,但由于某种原因,它无法按预期工作。

确切地说,我唯一的问题是,在找到第一分钟之后,程序会一直重复该分钟。因此,如果最小值为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 个答案:

答案 0 :(得分:0)

使用以下行覆盖计数位置的条目:

sort[count] = min;

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

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

答案 1 :(得分:0)

几个大问题。

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

  2. 对于外循环的每次迭代,从中开始内循环 count + 1然后从那里开始查看是否可以找到某些内容 小于当前最小值。从0开始,你一直在寻找 数组中的最小值作为整体而不是最小值 数组的其余部分。

  3. 找到剩余数据的最小值后,您应该交换它 与sort[count]。分配打破了过去的价值 在sort[count]。结合第2点,这就是为什么你不断获得相同的价值 在你的输出中重复。