【问题标题】:Selection sort in descending order - JAVA选择降序排序 - JAVA
【发布时间】:2019-12-01 23:20:16
【问题描述】:

我实现了一个选择排序来对随机整数数组进行排序。我希望用户在升序或降序之间进行选择。升序排序完美无缺,但降序却不行。这是我的选择排序的样子:

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());
}

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

【问题讨论】:

  • 如果最小升序排序有效,也许使用相同的循环结构并更改逻辑以测试最大值。看起来您的降序 for 循环中的逻辑不正确。
  • Arrays.sort(array) 或 Arrays.sort(array, Collections.reverseOrder());数组有一个长度,array.length,所以不要传入。
  • 开头使用“==”比较字符串错误。请改用 equals 方法。然后阅读minimal reproducible example 并清楚地描述确切的问题。 “不工作”不是工作问题描述。

标签: java arrays sorting selection


【解决方案1】:

首先,if 块应该与minPositionmaxPosition 进行比较,而不是i。其次,如果您同时选择了minimummaximum,那么您的内部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);
    }
}

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

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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-03
    • 2019-02-21
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2023-04-02
    相关资源
    最近更新 更多