首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在java中实现降序选择排序?

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

Stack Overflow用户
提问于 2018-09-18 02:29:31
回答 1查看 4.1K关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 02:50:08

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

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

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

代码语言:javascript
复制
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);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52373766

复制
相关文章

相似问题

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