我尝试实现冒泡排序,但它不起作用!帮我找个问题。
代码:
public class Main {
public static int e=0;
public static int arraylength;
public static int[] array = new int[10];
public static void main(String[] args) {
Random random = new Random();
for(int i=0;i<array.length;++i){
array[i]=random.nextInt(10);
System.out.print(" "+array[i]);
}
arraylength=array.length;
for (int i =0;i<arraylength;i++) {
arraylength--;
for (int j = 0; j < arraylength - 1; j++) {
if (array[j] > array[j + 1]) {
e = array[j + 1];
array[j + 1] = array[j];
array[j] = e;
}
}
}
}
}
控制台:
输入arr:5 1 5 4 7 8 7 7 2 8
输出:1 4 5 2 5 7 7 7 8 8
public class Main {
public static int e=0;
public static int arraylength;
public static int[] array = new int[10];
public static void main(String[] args) {
Random random = new Random();
for(int i=0;i<array.length;++i){
array[i]=random.nextInt(10);
System.out.print(" "+array[i]);
}
System.out.println();
arraylength=array.length;
for (int i =0;i<arraylength;i++) {
arraylength--;
for (int j = 0; j < array.length - 1; j++) {
if (array[j] > array[j + 1]) {
e = array[j + 1];
array[j + 1] = array[j];
array[j] = e;
}
}
}
for(int i=0;i<array.length;++i){
System.out.print(" "+array[i]);
}
}
}
输入arr:7 7 4 1 2 9 6 4 9 6
输出:1 2 4 4 6 6 7 7 9 9
它有效,但有时候:
输入arr:5 2 2 3 9 6 7 7 0 6
输出:2 2 3 0 5 6 6 7 7 9
答案 0 :(得分:0)
更改
for (int i =0; i<arraylength; i++) {
到
for (int i =0; i<array.length; i++) {
对于数组中的每个元素,外部循环需要运行一次,并且您不能使用arraylength
变量执行此操作,因为您正在减小其值,即在第一次迭代后,arraylength
不再等于array.length
。
答案 1 :(得分:0)
public static int e=0;
public static int arraylength;
public static int[] array = new int[10];
public static void main(final String[] args) {
final Random random = new Random();
for(int i=0;i<array.length;++i){
array[i]=random.nextInt(10);
System.out.print(" " + array[i]);
}
System.out.println();
arraylength = array.length;
for (int i =0;i<arraylength;i++) {
for (int j = 1; j < arraylength - i; j++) {
if (array[j - 1] > array[j]) {
e = array[j - 1];
array[j - 1] = array[j];
array[j] = e;
}
}
}
for (final int element : array) {
System.out.print(" " + element);
}
}
每次循环播放数组时,你都不需要减少arraylength的值
答案 2 :(得分:0)
试试这个:
public class Main {
public static int e=0;
public static int[] array = new int[10];
public static void main(String[] args) {
Random random = new Random();
for(int i=0;i<array.length;++i){
array[i]=random.nextInt(10);
System.out.print(" "+array[i]);
}
System.out.println();
for (int i =0;i<array.length;i++) {
for (int j = 0; j < array.length - 1; j++) {
if (array[j] > array[j + 1]) {
e = array[j + 1];
array[j + 1] = array[j];
array[j] = e;
}
}
}
for(int i=0;i<array.length;++i){
System.out.print(" "+array[i]);
}
}
}
该行
arraylength--;
造成了这个问题。您不需要更改值,因为它会影响for循环的工作。