首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >但短不能完全计算

但短不能完全计算
EN

Stack Overflow用户
提问于 2013-09-05 22:19:41
回答 1查看 78关注 0票数 0

我已经完成了这个bubblesort算法,但它并没有对列表进行完全排序。例如,如果我有数字10,9,8,7,6,它会将其排序为9,8,7,6,10,并就此结束。现在,如果您想知道为什么要将这个条件放在if (i + 1 < args.length)中,这是因为在进行比较时,由于索引增加到5,所以得到了一个IndexOutOfBoundsException。

我已经摆脱了我之前做过的额外代码,因为我把算法过于复杂,因为我试图将整个列表排序,我接近于计算到排序列表会被无限打印的程度,这是我作为mutator方法时不想要的。此外,一些人认为我所做的修改并不短,尽管算法比较和交换了像bubblesort这样的元素。因此,这就是为什么我决定删除我之前处理过的额外代码。

我的问题是,我怎样才能把整个名单整理好?因为到目前为止算法还没有做到这一点。

代码语言:javascript
复制
package algorithm;

import java.util.Arrays;

public class Algorithm {

/**
 * @param args the command line arguments
 */
private static int list[] = {10, 9, 8, 7, 6};

public Algorithm() {
}

public static void main(String[] args) {

    Algorithm alg = new Algorithm();

    alg.bubblesort(list);

}

public int[] bubblesort(int[] args) {
    for (int i = 0; i < args.length; i++) {

        int currentNumber = args[i];
        if (i + 1 < args.length) {
            if (currentNumber > args[i + 1]) {
                args[i] = args[i + 1];
                args[i + 1] = currentNumber;
            }
        }

    }
    System.out.println(Arrays.toString(args));
    return args;
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-05 22:27:04

气泡排序使用两个嵌套循环完成,只有将最大数字移动到数组的最后一个索引的内环,您需要添加如下所示的外部循环:

代码语言:javascript
复制
for (int j = 0; j < args.length; j++) {
   for (int i = 0; i < args.length - j; i++) {
       int currentNumber = args[i];
       if (i + 1 < args.length) {
         if (currentNumber > args[i + 1]) {
            args[i] = args[i + 1];
            args[i + 1] = currentNumber;
         }
       }
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18646850

复制
相关文章

相似问题

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