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

Błąd w sortowaniu QuickSort

HackNation - ogólnopolski hackathon
0 głosów
248 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ź 893 wizyt
pytanie zadane 8 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,630 p.)
0 głosów
1 odpowiedź 294 wizyt
pytanie zadane 29 października 2017 w Java przez barteku12 Obywatel (1,340 p.)
0 głosów
0 odpowiedzi 112 wizyt
pytanie zadane 18 kwietnia 2020 w Java przez princeV Nowicjusz (140 p.)

93,608 zapytań

142,531 odpowiedzi

323,005 komentarzy

63,102 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

Kursy INF.02 i INF.03
...