0

回答完这个问题后,我继续编写代码。它的工作方式很完美:

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),列表应该以降序或升序返回。

4

5 回答 5

2

简单的解决方案:你能做成orasc之一吗?1-1

然后你只需要改变一行:

if(asc * customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0)
于 2009-12-06T18:41:11.737 回答
1

您始终可以按升序排序,如果需要降序,只需将其反转。这是一个问题,即在循环内重复“if”测试是否比另一个数组遍历效率低。

我假设数组的大小相对较小。冒泡排序是出了名的低效,除了小数组外不应该使用。

于 2009-12-06T18:34:15.047 回答
1

升序排序意味着 at 的元素i小于 at 的元素i + 1。降序排序意味着 at 的元素i大于 at 的元素i +。诀窍是翻转你决定元素是否不合适的逻辑。具体来说,这一行:

if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0){

应该改为

if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) > 0){

如果你想翻转排序的顺序。

于 2009-12-06T18:34:26.823 回答
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 ;^)

于 2009-12-06T18:35:15.480 回答
1

如果您想要“软件工程”类型的答案而不是我上面给出的快速破解答案,您可以传递一个仿函数(搜索 Comparator 类)来进行比较,以实现最终灵活的搜索。

于 2009-12-06T18:36:18.753 回答