使用2D阵列进行冒泡排序

时间:2009-12-06 14:26:27

标签: java sorting multidimensional-array bubble-sort

你好,我知道如何为1维数组实现一个简单的冒泡排序。但是对于二维或多维,这就是我遇到问题的地方。

到目前为止,我一直在使用它来对1Dimensional Arrays进行排序,就像魅力一样。但主要是整数,而不是字符串:

boolean sort;

do{
    sort = true;

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

}while(!sort);

    // Descending Output
    // for (int k = testarray.length - 1; k >= 0 ; k--){

    // Ascending Output
    for (int k = 0; k < testarray.length ; k++){
        System.out.print(testarray[k] + ", ");
    }

假设我有:

客户编号,姓名,姓氏,地址

String customers[][] = {{"123", "John", "Doe", "Somewhere"}, {"007", "James", "Bond", "MI5"}, {"1337", "Lolcat", "Izgud", "Saturn"}}

现在,我想选择排序的内容:customernumber,name,surname或address。之后我想根据我的需要输出它的升序或降序。

我只是不知道如何使用bubble-sort来实现它。我想保持冒泡排序,没有其他排序算法,我想了解冒泡排序在这种情况下是如何工作的。

对于升序和降序,我的想法是:我可以做一个if-Loop。例如if (asc == 1) then output ascending, else output descending。然后,将通过控制台询问asc。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

二维数组基本上只是一个由数组组成的一维数组。

只需使用相同的代码,而不是整数,移动内部数组。

要知道一个数组是否比下一个数组“更大”,请比较正确数组成员的字符串值(因此名称或姓氏,...)。为此,您可以使用String CompareTo方法。

最后注意:如果内部数组实际上是包含信息的Object,则您提供的示例会更好。这样,您可以为所有字段分别使用数据类型,而不是所有字段都使用字符串。

e.g:

  class Person
  {
       int customerNumber;
       String name;
       String surName;
       String address;
  };

编辑:实际回答你的问题:

按以下方式更改您的计划:

更改临时声明:

 String [] temp;

并更改行:

 if(testarray[i] > testarray[i+1])

成:

 if(testarray[i][1] > testarray[i+1][1])

比它工作并按名称排序

[R

答案 1 :(得分:3)

在2D数组中,所包含对象的类型从intInteger更改为String[](注意:这是一个字符串数组)。这是您需要将temp的类型更改为。

最大的变化将是你的比较。你不能只使用<比较两个String数组 - 但你已经知道了。你需要做的是构建一个方法,它接受两个String[]参数并返回一个负数,0或正数,具体取决于第一个是小于/等于/大于第二个。然后,您可以对该方法的结果进行< / >比较,以确定排序顺序。

如果您希望能够使用多种不同的排序标准,您需要通过(例如)传递另一个参数告诉它如何工作来使比较功能更加通用,或者您需要几个不同的比较函数,并使用ifswitch来决定在排序过程中使用哪一个。

至于手动比较两个String数组,基本方法是:使用String.compareTo()比较第一个关键字符串。如果结果不为0,则返回该结果。如果为0,则第一个键相等,您需要比较下一个键。如果你的按键用完但仍然是0,你的两个元素在它们的键上是相同的,你返回0。

答案 2 :(得分:2)

您可以保持相同的排序算法。它仍然不知道2D阵列。你必须提出一个比较函数,它需要两个1D数组,并说哪一个更大。

答案 3 :(得分:2)

我猜你想把“123”,“john”,“doe”和“某处”组合在一起。

我建议你使用一个对象,比如说

public object Person {
    private int id;
    private String name;
    private String surname;
    private String address;
}

添加常用的getter和setter。

你可以有一个普通的Person对象数组,用你的冒泡排序算法对它们进行排序。您可以创建多个自定义比较器,将id,name,姓氏或地址与冒泡排序算法进行比较。

sort方法的签名应该类似于

public Person[] bubbleSort(Person[] persons, Comparator comp)