• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w sortowaniu QuickSort

VPS Starter Arubacloud
0 głosów
197 wizyt
pytanie zadane 25 maja 2020 w Java przez miko98 Nowicjusz (150 p.)
import java.util.Arrays;

public class Main
{
    public static void main(String[] args)
    {
        int[] example_array = {8, 2, 1, 3, 4, 5, 1, 2, 1, 2, 3};
        quickSort(example_array, 0, 10);
        System.out.println("Po quickSort: " + Arrays.toString(example_array));
    }

    public static void quickSort(int[] tab, int left, int right)
    {
        if ((right - left) > 0 )
        {
            int pivot_index = partitioning(tab, left, right);
            quickSort(tab, left, (pivot_index - 1));
            quickSort(tab, (pivot_index + 1), right);
        }
    }

    public static int partitioning(int[] tab, int left, int right)
    {
        int index_pivot = lookingForIndexPivot(left, right);
        int pivot = tab[index_pivot];
        swap(tab, index_pivot, right);

        int border = left;
        for (int i = 0; i < right; i++)
        {
            if (tab[i] < pivot)
            {
                swap(tab, i, border);
                border++;
            }
        }
        swap(tab, border, right);
        return border;
    }

    public static void swap(int[] tab, int first, int second)
    {
        int temp = tab[first];
        tab[first] = tab[second];
        tab[second] = temp;
    }

    public static int lookingForIndexPivot(int left, int right)
    {
        int i = (left+right)/2;
        return i;
    }
}

Dzień dobry. Próbuję samemu zaimplementować w Javie sortowanie QuickSort na tablicy. Ciągle jednak wyskakuje mi błąd, że przekraczam limit tablicy. Oto i on: 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 11
	at elseQuickSort.Main.swap(Main.java:47)
	at elseQuickSort.Main.partitioning(Main.java:35)
	at elseQuickSort.Main.quickSort(Main.java:18)
	at elseQuickSort.Main.quickSort(Main.java:19)
	at elseQuickSort.Main.quickSort(Main.java:19)
	at elseQuickSort.Main.quickSort(Main.java:20)
	at elseQuickSort.Main.quickSort(Main.java:19)
	at elseQuickSort.Main.quickSort(Main.java:19)
	at elseQuickSort.Main.main(Main.java:10)

Męczę się z tym już ponad 2 godziny i nie wiem jak to naprawić. Wydaję mi się, że coś jest nie tak z warunkiem podstawowym w metodzie quickSort. Jednak ile razy bym nie próbował, to naprawić, to ciągle mam to samo. Próbowałem zrobić to na różnych tablicach. Na jednych się udaje, a na drugich nie. Na każdej tablicy, pierwsze partycjonowanie wykonuje się prawidłowo. Dopiero później przy wywołaniu rekurencyjnym coś się psuje. Czy możecie mi pomóc znaleźć błąd lub chociaż jakoś nakierować? Będę wdzięczny.

komentarz 25 maja 2020 przez miko98 Nowicjusz (150 p.)
W porządku. Problem rozwiązany. Wystarczyło zmienić warunek podstawowy na (right > left) w metodzie quickSort. Wystarczyło zostawienie problemu i nagle oświecenie :D

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 690 wizyt
pytanie zadane 8 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,630 p.)
0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 29 października 2017 w Java przez barteku12 Obywatel (1,340 p.)
0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 18 kwietnia 2020 w Java przez princeV Nowicjusz (140 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,368 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...