2

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

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

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"}}

现在,我想选择对要排序的内容进行排序:客户编号、姓名、姓氏或地址。之后我想输出它升序或降序,这取决于我想要什么。

我只是不知道如何用冒泡排序来实现这一点。我想留在冒泡排序中,没有其他排序算法,我想了解冒泡排序在这种情况下是如何工作的。

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

任何帮助深表感谢。

4

4 回答 4

3

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

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

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

最后一点:如果内部数组实际上是一个包含信息的对象,那么您给出的示例会更好。这样,您可以为所有字段使用单独的数据类型,而不是全部将它们设为字符串。

例如:

  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

于 2009-12-06T14:35:17.663 回答
3

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

最大的变化将是您的比较。您不能只使用<- 比较两个 String 数组,但您已经知道这一点。您需要做的是为自己构建一个方法,该方法接受两个String[]参数并根据第一个参数是否小于/等于/大于第二个参数返回负数、0 或正数。然后,您可以对该方法的结果进行</>比较以建立您的排序顺序。

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

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

于 2009-12-06T14:37:44.053 回答
2

您可以保持相同的排序算法。它仍然不知道二维数组。你必须想出一个比较函数,它接受两个一维数组并说出哪个更大。

于 2009-12-06T14:34:29.397 回答
2

我猜你想将“123”、“john”、“doe”和“somewhere”组合在一起。

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

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

添加通常的 getter 和 setter。

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

排序方法的签名应该类似于

public Person[] bubbleSort(Person[] persons, Comparator comp)
于 2009-12-06T14:38:23.320 回答