首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择按降序排序- JAVA

选择按降序排序- JAVA
EN

Stack Overflow用户
提问于 2019-12-01 06:40:16
回答 1查看 1K关注 0票数 0

我实现了一个选择排序来对随机整数数组进行排序。我想让用户在升序或降序之间进行选择。升序排序可以完美地工作,尽管降序排序并非如此。下面是我的选择排序:

代码语言:javascript
复制
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());
}

我已经看到了一些与我的问题类似的问题,尽管我看到的问题都没有像这样设置他们的选择排序,所以我无法实现他们的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2019-12-01 23:11:57

首先,if块应该与minPositionmaxPosition进行比较,而不是与i进行比较。其次,如果同时选择了minimummaximum,那么内部的for循环应该在a.length - i处停止,而不是a.length处(因为顶部的i元素也是排序的)。同时执行这两种操作可以将其作为升序算法。

代码语言:javascript
复制
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);
    }
}

要切换到降序,只需添加一行即可。

代码语言:javascript
复制
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);
    }
}

使用swap函数https://www.geeksforgeeks.org/collections-swap-method-in-java-with-examples/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59120928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档