在this was answered之后,我继续努力完成代码。 它的工作方式非常完美:
static String[][] bubbleSort(String customerdata[][], int sortafter, int asc)
{
String temp [];
boolean sort;
do{
sortiert = true;
for (int i = 0 ; i < customerdata.length - 1; i++){
if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0){
temp = customerdata[i];
customerdata[i] = customerdata[i+1];
customerdata[i+1] = temp;
sort = false;
}
}
}while(!sort);
return customerdata;
}
但正如你所看到的,我在这个函数中缺少int asc。我想要的是另外返回一个排序的降序或升序数组(取决于asc == 1(asc)或asc == 0(desc))。
我正在失去如何在其中实现它。我的意思是目前我可以按升序或降序排序,但是一旦这个方法被调用了一些令人讨厌的长for()和if()循环。
我想把它紧凑地放在里面,并且取决于我给出bubblesort(x,0,0)或(x,0,1),列表应该以递减或递增的方式返回。
答案 0 :(得分:2)
简单的解决方案:您可以将asc
变为1
或-1
吗?
然后你只需要换一行:
if(asc * customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0)
答案 1 :(得分:1)
如果需要降序,您可以随时对升序进行排序并简单地将其反转。这是一个问题,即在循环内重复“if”测试是否比另一次遍历数组效率低。
我假设数组的大小相对较小。气泡排序是非常低效的,除小阵列外不应使用。
答案 2 :(得分:1)
按升序排序表示i
处的元素小于i + 1
处的元素。降序排序意味着i
处的元素大于i +
处的元素。诀窍是在您决定元素是否不合适的地方翻转逻辑。具体来说,这一行:
if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0){
应改为
if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) > 0){
如果你想翻转排序顺序。
答案 3 :(得分:1)
试试这个:
for (int i = 0 ; i < customerdata.length - 1; i++){
if(customerdata[i+asc][sortafter].compareTo(customerdata[i+1-asc][sortafter]) < 0){
temp = customerdata[i];
customerdata[i] = customerdata[i+1];
customerdata[i+1] = temp;
sort = false;
}
}
Asc可以是0或1(升序或降序......)
通过将其添加到索引,您基本上交换if语句,而不添加另一个if; ^)
(注意我改变了2个职位:“+ asc”和“ - asc”)
编辑: 不要忘记在第一行放置一个大断言,确保Asc真的不能是0或1; ^)
答案 4 :(得分:1)
如果您想要“软件工程”类型的答案而不是上面给出的快速黑客答案,您可以通过仿函数(搜索Comparator类)进行比较,以便最终灵活搜索。