选择按降序排序-JAVA

选择按降序排序-JAVA,java,arrays,sorting,selection,Java,Arrays,Sorting,Selection,我实现了一个选择排序来对随机整数数组进行排序。我希望用户在升序或降序之间进行选择。升序排序可以完美地工作,而降序排序则不行。我的选择排序如下所示: public String selection(int[] array,int num,String order) { String output = ""; int min; // This is the descending selection sort if (order == "desc") {

我实现了一个选择排序来对随机整数数组进行排序。我希望用户在升序或降序之间进行选择。升序排序可以完美地工作,而降序排序则不行。我的选择排序如下所示:

public String selection(int[] array,int num,String order) {
    String output = "";
    int min;
    // This is the descending selection sort
    if (order == "desc") {
        for (int i = num - 1; i >= 0; i--) {
            // Assume first element is min
            min = i;
            for (int j = i + 1; j < num; j++) {
                if (array[j] < array[min]) {
                    min = j;

                }
            }
            if (min != i) {
                final int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
            output = output + Integer.toString(array[i]) + "\n";
        }
    } // This is the ascending selection sort 
    else {
        for (int i = 0; i < num; i++) {
            // Assume first element is min
            min = i;
            for (int j = i + 1; j < num; j++) {
                if (array[j] < array[min]) {
                    min = j;

                }
            }
            if (min != i) {
                final int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
            output = output + Integer.toString(array[i]) + "\n";
        }
    }
    return(output.trim());
}
公共字符串选择(int[]数组,int num,字符串顺序){
字符串输出=”;
int-min;
//这是降序选择排序
如果(顺序=“描述”){
对于(int i=num-1;i>=0;i--){
//假设第一个元素是min
min=i;
对于(int j=i+1;j

我看到了一些与我类似的问题,尽管我看到的问题中没有一个问题的选择排序是这样设置的,因此我无法实现它们的解决方案。

首先,
if
块应该与
minPosition
maxPosition
进行比较,而不是
I
。其次,如果您同时选择了
最小值
最大值
,则内部for循环应停止在
a.length-i
,而不是
a.length
(因为顶部的
i
元素也已排序)。这两种方法都可以作为升序算法

public static void SortAscending(int[] a){
    for(int i = 0; i < a.length; i++){
        int maxPosition=i;
        int minPosition=i;
        for(int j = i+1; j < a.length - i; j++){
            if(a[j] < a[minPosition]){
                minPosition = j;
            }
            if(a[j] > a[maxPosition]){
                maxPosition = j;
            }
        }
        /*
        if(i < a.length/2-1)
        */
        swap(a,maxPosition,i);
        swap(a,minPosition,a.length-i-1);
    }
}
公共静态无效排序(int[]a){
for(int i=0;ia[maxPosition]){
maxPosition=j;
}
}
/*
如果(i
要切换到降序,只需添加一行即可

public static void SortDescending(int[] a){
    for(int i = 0; i < a.length; i++){
        int maxPosition=i;
        int minPosition=i;
        for(int j = i+1; j < a.length - i; j++){
            if(a[j] < a[minPosition]){
                minPosition = j;
            }
            if(a[j] > a[maxPosition]){
                maxPosition = j;
            }
        }
        /*
        if(i < a.length/2-1)
        */
        swap(a,minPosition,maxPosition); // <-- this line
        swap(a,maxPosition,i);
        swap(a,minPosition,a.length-i-1);
    }
}
publicstaticvoidsortdescending(int[]a){
for(int i=0;ia[maxPosition]){
maxPosition=j;
}
}
/*
如果(iswap(a,minPosition,maxPosition);//如果最小升序排序有效,可能使用相同的循环结构并更改逻辑以测试最大值。降序for循环中的逻辑似乎不正确。array.sort(array)或array.sort(array,Collections.reverseOrder());数组有一个a长度,array.length,所以不要传入。它从“==”开始比较字符串是错误的。请改用equals方法。然后阅读并清楚地描述确切的问题。“不工作”不是工作问题描述。