【问题标题】:Sorting Array: Bubble sort排序数组:冒泡排序
【发布时间】:2015-12-02 01:44:56
【问题描述】:
public static void sortByNumber(Course[] list) {
    Course temp = new Course();

    boolean fixed = false;

    while(fixed == false) {
        fixed = true;
    for (int i = 0; i<list.length-1; i++) {

        if (list[i].getNum() > list[i+1].getNum()) {
            temp.setNum(list[i].getNum());
            temp.setDept(list[i].getDept());
            temp.setTitle(list[i].getTitle());

            list[i] = list[i+1];
            list[i+1] = temp;
            fixed = false;
        }
    }
    }}

这是一种对大学开设的课程进行排序的方法。

例如,每门课程都有其部门(即 MATH)、编号(即 263)和标题(即工程师的常微分方程) - MATH 263 工程师的常微分方程。

在我的另一个类中,我创建了一个对象 Course,它有自己的访问器和修改器(即 getNum()、setNum()、getDept() 等)。

鉴于课程列表很长,我想根据课程编号来排列它们,但是上面的方法似乎不起作用。

有人可以暗示这样做的原因吗?

【问题讨论】:

  • 从最少到最多排列,{100,101,102...201,202,...}
  • 提示:看看你的二传手。您不是在考虑面向对象的编程。在你调用它的 setter 之前 temp 是多少?之后是什么?

标签: java arrays sorting


【解决方案1】:

temp 变量是对Course 对象的引用。

实际上list 数组是对Course 对象的引用数组。

您只需要更改引用而不是将对象的值复制到temp。只需执行 temp = list[i]; 即可保留对数组第 i 个元素的引用。

【讨论】:

  • 我看到我的冗余效率低下,但为什么会产生不正确的结果?
  • 您将第 i 个引用指向下一个对象(第 i+1 个,没关系),但使第 i+1 个引用始终指向临时对象而不是指向到第 i 个对象。
  • 您可以在循环中初始化temp,这将是正确的,但这将是多余且低效的。将你的温度指向 i+1 是最好的解决方案。查看 RosettaCode 上的冒泡排序算法和其他一些排序方法来学习。 rosettacode.org/wiki/Sorting_algorithms/Bubble_sort#Java
【解决方案2】:

我宁愿实现Comparable 接口。

class Course implements Comparable<Course>{
    @Override
    public int compareTo(Course other){
        return this.getNum().compareTo(other.gerNum());
    }
}

然后您可以使用Array.sort(Course[] list) 对您的课程数组进行排序。

【讨论】:

    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2013-09-28
    • 2023-03-28
    • 2014-06-20
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多