在冒泡排序中排序升序或降序

时间:2009-12-06 18:28:58

标签: java arrays sorting return-value bubble-sort

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),列表应该以递减或递增的方式返回。

5 个答案:

答案 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类)进行比较,以便最终灵活搜索。