排序算法不显示正确的输出

时间:2015-11-17 03:38:54

标签: java algorithm sorting shellsort

我不明白为什么我没有从我的shell排序算法得到正确的输出,我无法识别问题,任何帮助将不胜感激。

public class sortingExample {
public static void main(String args[]) {
    int[] myArray = {4, 1, 3, 2, 1, 2};
    int increments = (myArray.length/2), i, tmp, j;
    for(; increments > 0; increments /= 2) {
        for(i = increments; i < myArray.length; i++) {
            j = i - increments;
            tmp = myArray[j];
            if(myArray[j] > myArray[i]) {
               myArray[j] = myArray[i];
               myArray[j] = tmp;
            }
        }
    }
    System.out.println(myArray[0]);
}

它应返回最小的数字,但不会发生任何变化,所有数字都保留在相应的位置。

3 个答案:

答案 0 :(得分:0)

在if语句中更改交换实现。您已在数组中设置了相同的元素两次,其中j为索引。

tmp = myArray[j];
if(myArray[j] > myArray[i]) {
    myArray[j] = myArray[i];           
    myArray[i] = tmp; //here you have to set a tmp value for i-element to swap two values
}

答案 1 :(得分:0)

您可以使用以上答案改进代码。但是如果你需要用最少的代码行从数组中获取最小值,你可以按照下面的例子进行操作:

System.out.println("min Value - " + Arrays.stream(myArray).summaryStatistics().getMin());
System.out.println("max Value - " + Arrays.stream(myArray).summaryStatistics().getMax());

答案 2 :(得分:-1)

而不是myArray[j] = tmp;您应该myArray[i] = tmp;