Раздел QuickSort с исключениями

1

Вечер. Я делаю немного проекта по анализу алгоритмов. Это о quickSort и перевод двух разных алгоритмов секционирования в код, а затем их сравнение в отчете.

Первый алгоритм:

To partition a[left…right] such that a[left…j–1] are all less than or 
equal to a[j], and a[j+1…right] are all greater than or equal to a[j]: 

1. Set pivot to a[left]. 

2. Set i = left + 1 and j = right. 

3. While i ≤ j, repeat: 
 3.1. While i ≤ j and a[i] ≤ pivot, increment i. 
 3.2. While j ≥ i and a[j] ≥ pivot, decrement j. 
 3.3. If i < j, swap a[i] and a[j]. 

4. If j ≠ left, set a[left] to a[j], and a[j] to pivot. 

5. Terminate with answer j

И я закодировал его со следующим, который появляется без ошибок...

public class TestQuickSort {

    public static int partition(Comparable[] a, int left, int right) {

        Comparable p = a[left];
        int i = left + 1;
        int j = right;
        while (i <= j) {
            while (i <= j && a[i].compareTo(p) < 0) {
                i++;
            }
            while (j >= i && a[j].compareTo(p) > 0) {
                j--;
            }
            if (i < j) {
                Comparable temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        if (j != left) {
            a[left] = a[j];
            a[j] = p;
        }

        return j;

    }

    public static void quickSort(Comparable[] a, int left, int right) {
// Sort a[left…right] into ascending order.
        if (left < right) {
            int p = partition(a, left, right);
            quickSort(a, left, p - 1);
            quickSort(a, p + 1, right);
        }
    }

    public static void main(String[] args) {
        // TODO code application logic here
        Comparable[] a = {1, 2, 6, -9, 0};
        quickSort(a, 0, a.length);
    }
}

... пока я не запустил его, и я встречался с тремя исключениями

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at TestQuickSort.partition(TestQuickSort.java:22)
    at TestQuickSort.quickSort(TestQuickSort.java:41)
    at TestQuickSort.main(TestQuickSort.java:50)
Java Result: 1

может кто-нибудь помочь мне, я не понимаю, почему? Это проблема с моими циклами? Должен ли я использовать разные типы петель?

Спасибо всем, кто может ответить.

Теги:

1 ответ

0

Индекс 5-го элемента массива равен 4. Попробуйте вызвать с помощью: quickSort(a, 0, a.length-1);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню