0

我一直在尝试在 java 中使用简单的整数数组来实现冒泡排序。不过好像有点问题。现在我知道使用 ArrayList 将是最好的选择,我也会这样做。但是为什么不使用简单的整数数组对其进行排序。这是代码

package sort;

public class BubbleSort {

    int array[]={1,5,3,32,54,6,87,5,1};
    int temp=0;
public void enter(){
    for(int i=0;i<array.length;i++){
        for(int j=0;j<(array.length-i);j++){
            if(array[j]>=array[j+1]){


                temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
                }

        }
    }
}
public void show(){

    for(int i:array){
    System.out.println(i);
    }
}
public static void main(String str[]){

    new BubbleSort().Enter();
    new BubbleSort().Show();
}
}

它产生与输入相同的数组。什么都没有改变。简单数组和 ArrayList 或 Vector 之间的区别,只是它们提供了数组大小的动态时间扩展。还有什么更多的吗?我的意思是简单数组每次操作时都会创建一个不同的实例,就像字符串一样?这里似乎确实如此。

4

4 回答 4

5

因为您正在对一个实例进行排序并显示另一个。

new BubbleSort().Enter();
new BubbleSort().Show();

采用

BubbleSort bubbleSort = new BubbleSort();
bubbleSort.Enter();
bubbleSort.Show();

此外,您至少应该重命名Enter()enter()Show()toshow()

于 2012-09-03T17:32:31.697 回答
5

问题是您没有为 BubbleSort 类的实例化指定名称。

new BubbleSort().Enter();
new BubbleSort().Show();

您的代码创建一个新的 BubbleSort 类,然后对其进行排序。然后它创建另一个新的(并且完全独立的) BubbleSort 类,并改为显示那个 - 它还没有被排序。

您想为变量命名,以便对其进行排序然后显示它,如下所示:

BubbleSort myBubbleSort = new BubbleSort();
myBubbleSort.Enter();
myBubbleSort.Show();

作为旁注(并在 SiB 的回答中指出),您可能还想查看Java Naming Conventions。遵循这些约定可以使您的代码对其他 Java 程序员更易读,并包括使用lowerCamelCase方法名称和UpperCamelCase类名称等内容。

于 2012-09-03T17:33:39.643 回答
3

因为您正在创建两个不同的 BubbleSort 对象,对第一个对象进行排序并显示不同的对象。

本来应该是......

public static void main(String str[]){

    BubbleSort sort = new BubbleSort();
    sort.Enter();
    sort.Show():

}
于 2012-09-03T17:36:45.887 回答
1

正确的 BubbleSort 代码是:

    int temp = 0;
    for (int i = 0; i < array.length; i++) {
        for (int j = 1; j < (array.length - i); j++) {
            if (array[j - 1] > array[j]) {
                temp = array[j - 1];
                array[j - 1] = array[j];
                array[j] = temp;
            }

        }
    }

我希望它可以帮助其他人寻找它。

于 2014-01-08T01:42:19.423 回答