Avlordin
@Avlordin

Почему после сортировки ничего происходит?

Делал сортировку массива объектов класса Student. Сортировка вставками работала правильно, однако при быстрой сортировке столкнулся с проблемой. Программа останавливается после student.quickSort(0, 4) в main, а точнее начинается ввод в консоль, причем не понятно, по какой причине.
import java.util.Scanner;

public class SortingStudentsByGPA {
    Student[] iDNumber = new Student[5];

    public void setArray() {
        for (int i = 0; i < iDNumber.length; i++) {
            Scanner in = new Scanner(System.in);
            System.out.print("Student: ");
            String name = in.nextLine();
            System.out.print("Grade: ");
            int grade = in.nextInt();
            iDNumber[i] = new Student(name, grade);
        }
    }

    public void quickSort(int low, int high) {
        if (iDNumber.length == 0) {
            return;
        }
        if (low >= high) {
            return;
        }

        int middle = low + (high - low) / 2;
        Student base = iDNumber[middle];

        int i = low;
        int j = high;
        while (i <= j) {
            while (iDNumber[i].compareTo(base) < 0) {
                i++;
            }
            while (iDNumber[i].compareTo(base) > 0) {
                j--;
            }
            if (i <= j) {
                Student temp = iDNumber[i];
                iDNumber[i] = iDNumber[j];
                iDNumber[j] = temp;
                i++;
                j--;
            }
        }
        if (low < j) {
            quickSort(low, j);
        }
        if (high > i) {
            quickSort(i, high);
        }
    }

    public void outStudents() {
        for (Student student : iDNumber) {
            System.out.println(student);
        }
    }

    public static void main (String[] args){
        SortingStudentsByGPA student = new SortingStudentsByGPA();
        student.setArray();
        student.quickSort(0, 4);
        student.outStudents();
    }
}
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
Rebel-Cat
@Rebel-Cat
ты указал вместо нужной j - "i"
public void quickSort(int low, int high) {
 while (iDNumber[j].compareTo(base) > 0) {
                j--;
            }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы