Java选择排序返回重复值

时间:2016-09-14 21:45:09

标签: java sorting

int [] arr2 = {43, 56, 44, 56, 21, 75, 41};

int max = arr2[0];
int temp3 = 0;
int tempLoc = 0;

for(int i = 0; i < arr2.length - 1; i++){
    for(int j=arr2.length-1; j < 1; j--){
        if(arr2[j-1] < arr2[j] ){
            max=arr2[j];
            tempLoc = j;
        } else{

            max = arr2[j-1];
            tempLoc = j;
        }

    }

    //replace elements here.
    temp3 = arr2[arr2.length - 1 - i];
    arr2[arr2.length - 1 - i] = max;
    arr2[tempLoc] = temp3;

}

System.out.println("\n " + Arrays.toString(arr2));

我有这个,输出是:

{56 43 43 43 43 43 43}

我不想每个人说一个解决方案,我希望有人帮我找到问题。对我来说,它是这样的:

(1)例如i = 1,在j循环中,找到最大值然后循环结束然后元素被正确替换我说“

那么问题是什么?

1 个答案:

答案 0 :(得分:0)

好的,首先,在第二个循环中,您有j < 1,应该有j > 1j > 0(不确定,您的算法)。

其次,无论如何分配最大值,您应该检查当前最大值是否大于您想要分配的值,如果是,那么请不要管它。此外,您始终将tempLoc分配给j,不知道那是什么。一般来说,我认为你的发现max太复杂了,只需要遍历所有元素并将值分配给max,如果它们更大,并记住索引,如下所示:

for(int j=0; j<arr2.length-i; j++){
  if(arr2[j] > max){
    max = arr2[j];
    indexOfMax = j;
  }
}

但就像我说的那样,这是你的算法,你可能想要做一些不同的事情。