排序算法未显示正确的输出
Sorting algorithm not displaying correct output
我不明白为什么我的 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]);
}
应该是return最小的数字,但没有发生任何变化,所有数字都保持在相应的位置。
更改 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
}
而不是 myArray[j] = tmp;
你应该 myArray[i] = tmp;
您可以使用上述答案改进您的代码。但是如果你需要用最少的代码行从数组中获取最小值,你可以按照下面的例子:
System.out.println("min Value - " + Arrays.stream(myArray).summaryStatistics().getMin());
System.out.println("max Value - " + Arrays.stream(myArray).summaryStatistics().getMax());
我不明白为什么我的 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]);
}
应该是return最小的数字,但没有发生任何变化,所有数字都保持在相应的位置。
更改 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
}
而不是 myArray[j] = tmp;
你应该 myArray[i] = tmp;
您可以使用上述答案改进您的代码。但是如果你需要用最少的代码行从数组中获取最小值,你可以按照下面的例子:
System.out.println("min Value - " + Arrays.stream(myArray).summaryStatistics().getMin());
System.out.println("max Value - " + Arrays.stream(myArray).summaryStatistics().getMax());