所以我完成了大部分代码。我只是无法弄清楚为什么排序列表不是从最小到最大的顺序。赋值是从1-10生成10个随机整数。显示未排序的列表。显示已排序(从最小到最大)。显示数组内容。
int [] number = new int [10];
System.out.print("Random Numbers:");
for (int d = 0 ; d<number.length ; d++){
int RandomG = g.nextInt(100) + 1;
System.out.print("\t" + RandomG);
number[d] = RandomG ;
}
System.out.print("\nSorted Numbers:"+Arrays.toString(BubbleSortAsceMethod(number)));
}
public static int [] BubbleSortAsceMethod(int[] x) {
int temp;
for (int i = 0; i < x.length; i++) {
for (int j = 1; j < x.length -i; j++) {
if (x[j - 1] < x[j]) {
temp = x[j - 1];
x[j - 1] = x[j];
x[j] = temp;
}
}
}
return x;
}
}
答案 0 :(得分:0)
您需要更改条件
当前代码
if (x[j - 1] < x[j])
固定代码
if (x[j - 1] > x[j])
但是,您可以通过添加isSorted标志来增强代码。
public static int[] BubbleSortAsceMethod(int[] x) {
for (int i = 1; i < x.length; i++) {
boolean isSorted = true;
for (int j = 0; j < x.length - i; j++) {
if (x[j] > x[j + 1]) {
int temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
isSorted = false;
}
}
if (isSorted) {
break;
}
}
return x;
}
答案 1 :(得分:0)
我无法弄清楚为什么排序列表不是从最小到最大的顺序。
您的问题发生在x[j - 1] < x[j]
。如果temp
变量在当前遍历值(temp = x[j - 1]
)之前从一步中分配了较小的值,那么条件是错误的,然后它与当前遍历值上的较大值交换,这意味着当前遍历之前的值将始终具有比其当前遍历值更大的值。这就是为什么数字从最大到最低排序的原因。
要更正它,只需将条件从x[j - 1] < x[j]
更改为x[j - 1] > x[j]
,其中temp
值将在当前遍历值之前的一步中分配最大值,并且用当前遍历值的最低值交换其位置。因此,当前遍历之前的值总是低于其当前遍历值。
public static void main(String[] args) {
int[] number = new int[10];
Random g = new Random();
System.out.print("Random Numbers:");
for (int d = 0; d < number.length; d++) {
int RandomG = g.nextInt(100) + 1;
System.out.print("\t" + RandomG);
number[d] = RandomG;
}
System.out.print("\nSorted Numbers:" + Arrays.toString(BubbleSortAsceMethod(number)));
}
public static int[] BubbleSortAsceMethod(int[] x) {
int temp;
for (int i = 0; i < x.length; i++) {
for (int j = 1; j < x.length - i; j++) {
if (x[j - 1] > x[j]) {
temp = x[j - 1];
x[j - 1] = x[j];
x[j] = temp;
}
}
}
return x;
}
注意:您的代码不完整,所以我需要完成它(为您),也许它可能与您的实际代码不一样。请在下一次提问时让其他人了解它。