首页 > 解决方案 > 如何实现降序选择排序

问题描述

我必须创建的方法应该将整数数组作为参数,并返回整数数组,其内容按降序排序——从大到小。注意 - 此方法的实现中不应使用任何库。

我尝试使用常规选择排序并在最后使用交换,但刚刚发生语法错误:

public static int[] reverseSelectionSort(int[] arrayToBeSorted) {
    // implementation of Task 3 goes here
    for(int i = 0; i < arrayToBeSorted.length; i++){
        int maxPosition=i;
        int minPosition=i;
        for(int j = i+1; j < arrayToBeSorted.length - i; j++){
            if(arrayToBeSorted[j] < arrayToBeSorted[minPosition]){
                minPosition = j;
            }
            if(arrayToBeSorted[j] > arrayToBeSorted[maxPosition]){
                maxPosition = j;
            }
        }
        swap(arrayToBeSorted,minPosition,maxPosition);
        swap(arrayToBeSorted,maxPosition,i);
        swap(arrayToBeSorted,minPosition,arrayToBeSorted.length-i-1);
    }
    return arrayToBeSorted; // change this to return the sorted array
}

public static void main(String[] args) {
    int[] array2 = {3, 6, 8, 3, 5, 7, 1};
    int[] sorted = reverseSelectionSort(array2);

    System.out.print("task: [");

    for (int i = 0; i < sorted.length; i++) {
        if (i > 0) {
            System.out.print(", ");
        }

        System.out.print(sorted[i]);
    }

    System.out.println("]");
}

如果您在数组 [3, 6, 8, 3, 5, 7, 1] 上调用方法,则该方法应返回数组 [8, 7, 6, 5, 3, 3, 1]。

标签: javasortingselection-sort

解决方案


一旦您将 swap 的实现添加到您的代码中(并将其全部放在一个类中),它就会产生您想要的输出。也许你认为 swap 是一个 java uitl,它是用于 Collections 的,但数组不是 Collection。因此,以下内容几乎没有变化:

    public class soSelect{ //embed in class, added
public static int[] reverseSelectionSort(int[] arrayToBeSorted) {
    // implementation of Task 3 goes here
    for(int i = 0; i < arrayToBeSorted.length; i++){
    int maxPosition=i;
    int minPosition=i;
    for(int j = i+1; j < arrayToBeSorted.length - i; j++){
        if(arrayToBeSorted[j] < arrayToBeSorted[minPosition]){
            minPosition = j;
        }
        if(arrayToBeSorted[j] > arrayToBeSorted[maxPosition]){
            maxPosition = j;
        }
    }
    swap(arrayToBeSorted,minPosition,maxPosition);
    swap(arrayToBeSorted,maxPosition,i);
    swap(arrayToBeSorted,minPosition,arrayToBeSorted.length-i-1);
}
    return arrayToBeSorted; // change this to return the sorted array
}
public static void swap(int[] a, int i, int j){ //had to implement it
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}
public static void main(String[] args) {
    int[] array2 = {3, 6, 8, 3, 5, 7, 1};
    int[] sorted = reverseSelectionSort(array2);

    System.out.print("task: [");

    for (int i = 0; i < sorted.length; i++) {
        if (i > 0) {
            System.out.print(", ");
        }

        System.out.print(sorted[i]);
    }

    System.out.println("]");
}
}//added outer brace

我在 java doodle 中运行它并打印:

task: [8, 7, 6, 5, 3, 3, 1]

除此之外,我没有进行测试,但这至少应该让你摆脱困境,或者充其量是完成。当然,您可以与上述评论指向您的实现进行比较。


推荐阅读