java - 如何在java中实现降序选择排序?

标签 java sorting selection-sort

我想实现一个选择排序方法,它接受一个整数数组并按降序对其进行排序。然而,诀窍是保持原来的选择排序方法不变,而是使用简单的算术运算,并且在数组完成排序后不添加额外的循环来交换元素。这是我的代码,其想法是将最大值和最小值的位置存储在局部变量中,并在内循环完成迭代后将它们与相应的位置交换。我什至尝试仅使用一个变量来查找最低值并将其放在数组的末尾,但我失败了,并且得到了错误的结果,我需要帮助发现错误。这是我的代码

public static void newSortMethod(int[]a){
    for(int i = 0; i < a.length-1; i++){
        int maxPosition=i;
        int minPosition=i;
        for(int j = i+1; j < a.length; j++){
            if(a[j] < a[minPosition]){
                minPosition = j;
            }
            if(a[j] > a[maxPosition]){
                maxPosition = j;
            }
        }
        swap(a,maxPosition,i);
        swap(a,minPosition,a.length-i-1);
    }
    System.out.println();
}

public static void swap(int[]a, int i, int j){
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

public static void main(String[] args) {
    int[] a = {2,6,3,9,5,4,8,7,0,13,-3,1};
    newSortMethod(a);
}

这是到目前为止程序的输出 -3 8 2 9 13 5 4 6 3 1 7 0

最佳答案

你原来的算法是错误的。首先,if block 应与 minPositionmaxPosition 进行比较,而不是与 i 进行比较。其次,如果您同时选择最小最大,那么您的内部for循环应该停止在a.length - i,而不是a.length (因为顶部的 i 元素也已排序)。执行这两项操作后,您将获得升序算法。

public static void newSortMethod(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;
            }
        }
        swap(a,maxPosition,i);
        swap(a,minPosition,a.length-i-1);
    }
}

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

public static void newSortMethod(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;
            }
        }
        swap(a,minPosition,maxPosition); // <-- this line
        swap(a,maxPosition,i);
        swap(a,minPosition,a.length-i-1);
    }
}

关于java - 如何在java中实现降序选择排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52373766/

相关文章:

java - 执行 mvn eclipse :eclipse 后我的源文件夹被删除

javascript - 对数组进行排序 (Javascript)

c - C中的选择排序程序

java - 根据姓氏的字母顺序对用户输入的姓名进行排序

java - 创建 Excel 文件时出错

java - 为什么Java中没有SortedList?

java - 本地类 Java 的优势

ios - 如何通过比较swift中的每个字符来排序?

vb.net - VB中按第二列对列表进行排序

c++ - 遇到 Mergesort 的比较和排序部分的问题 (c++)