我需要对对象数组进行排序,并将它们从最高到最低排序

时间:2014-05-05 04:02:29

标签: java arrays sorting

我是初学java课程的学生,我今天早些时候在我的任务中得到了一些帮助,这真的很有帮助!所以我想在我最后一部分放弃之前再试一次。我已经能够把一切都搞定了,但是我的那种不行。我必须使用这种格式,因为我的教授不希望我们使用排序API。它正确处理,这意味着我可以手动获得与运行时相同的结果,因此我认为问题出在逻辑本身。任何人都可以看到我做错了什么,并提供任何提示或帮助。提前致谢。这是我的排序循环的代码:

    int i, j; // used to index into the array
    double temp;

    for (i = 1; i < count ; ++i) {
        temp = students[i].getGPA();
        j = i - 1;
        while (j >= 0 && temp < students[j].getGPA()) 
        {
            students[j + 1] = students[j];
            j = j - 1;
        }
        students[j + 1]= students[i];
    }

3 个答案:

答案 0 :(得分:1)

您没有正确进行交换。请查看以下示例代码:

        for (int i = 0; i < students.length; i++) 
        {
            for (int j = 1; j < students.length - i; j++)
             {
               if (students[j - 1].getGPA() > students[j].getGPA())
                {
                   // assuming that your class name is Student
                   Student temp = students[j - 1];
                   students[j - 1] = students[j];
                   students[j] = temp;
                }
             }
        }

答案 1 :(得分:0)

你的问题是,通过while循环的第一次迭代会覆盖学生[i]。当您进入for循环时,您需要将学生[i]而不仅仅是GPA保留在临时值中。

答案 2 :(得分:0)

稍微改进了你的逻辑。 Plz验证适当性!

    package com.kvvssut.misc;

    public class SortArray {

        public static void main(String[] args) {

            double [] studentsGPA = {8.3,7.2,10,6.5,4.9};
            int count = studentsGPA.length;
            int i, j; // used to index into the array
            double temp;

            for (i = 1; i < count ; ++i) {
                j = i;
                while (j > 0 && (temp = studentsGPA[j]) < studentsGPA[--j]) {   // can use students[j].getGPA() similarly 
                    studentsGPA[j+1] = studentsGPA[j];
                    studentsGPA[j] = temp;
                }
            }

            for (double sgpa : studentsGPA ) {
                System.out.println(sgpa);
            }
        }

    }