你好,我知道如何为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。
非常感谢任何帮助。
答案 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数组中,所包含对象的类型从int
或Integer
更改为String[]
(注意:这是一个字符串数组)。这是您需要将temp
的类型更改为。
最大的变化将是你的比较。你不能只使用<
比较两个String数组 - 但你已经知道了。你需要做的是构建一个方法,它接受两个String[]
参数并返回一个负数,0或正数,具体取决于第一个是小于/等于/大于第二个。然后,您可以对该方法的结果进行<
/ >
比较,以确定排序顺序。
如果您希望能够使用多种不同的排序标准,您需要通过(例如)传递另一个参数告诉它如何工作来使比较功能更加通用,或者您需要几个不同的比较函数,并使用if
或switch
来决定在排序过程中使用哪一个。
至于手动比较两个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)