2

我得到了这个从低到高排序 int[] a 的算法。

public static void sortering(int[] a){
    int temp;               

    for(int i = 0; i < a.length; i++){
    for(int j = i + 1; j < a.length; j++){
        if(a[i] > a[j]){
            temp = a[j];
            a[j] = a[i];
            a[i] = temp;
        }
    }
}
}

我想做的是扭转它,让它从高到低排序。我认为这将是在公园里散步,做这样的事情:

public static void sorteringU(int[] a){
    int temp;

    for(int i = a.length; i < a.length; i--){
        for(int j = i - 1; j < a.length; j--){
            if(a[i] > a[j]){
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
}

我错了,这显然没有任何作用。有人愿意帮忙吗?

编辑:谢谢 Jesper 和 Satya,它奏效了。

4

5 回答 5

3

这就够了:

public static void sorteringU(int[] a){
    int temp;               

    for(int i = 0; i < a.length; i++){
    for(int j = i + 1; j < a.length; j++){
        if(a[i] < a[j]){ // Change ">" to "<"
            temp = a[j];
            a[j] = a[i];
            a[i] = temp;
        }
    }
}
}
于 2013-10-28T09:05:33.253 回答
1
public static void sortering(int[] a){
    int temp;               

    for(int i = 0; i < a.length; i++){
for(int j = i + 1; j < a.length; j++){
    if(a[i] < a[j]){
        temp = a[j];
        a[j] = a[i];
        a[i] = temp;
    }
    }
}
}

试试这个,而不是if(a[i] > a[j]),做 if(a[i] < a[j])

于 2013-10-28T09:05:34.520 回答
0

这是冒泡排序算法,只要改变比较器方法就可以了

    change it from if(a[i] > a[j]) to if(a[i] < a[j])

让其他代码保持不变。

于 2013-10-28T09:19:22.970 回答
0

它应该是:

                 note -1   note condition change
                    V       V
for(int i = a.length-1; i >= 0; i--){
  for(int j = i - 1;    j >= 0; j--){

它必须是-1,因为数组从0length-1,您之前从 0 开始,因此您需要从另一侧开始,即length-1

你需要检查>= 0。如果你检查< length,它将永远持续下去,因为它只会变得更小,所以它永远不会大于length。如果与 0 进行比较,它将在到达数组开头时立即停止。

只是更改if(a[i] > a[j])if(a[i] < a[j])将是一个更简单的修复

于 2013-10-28T09:09:04.957 回答
0

相信我,您不需要更改遍历循环:)。排序逻辑隐藏在if(a[i] > a[j]). 只需将更改更改if(a[i] > a[j])if(a[i] < a[j]). 它会起作用的。

for(int i = 0; i < a.length; i++){
    for(int j = i + 1; j < a.length; j++){
        if(a[i] < a[j]){
            temp = a[j];
            a[j] = a[i];
            a[i] = temp;
        }
    }
}
于 2013-10-28T09:11:36.553 回答