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

Błąd w sortowaniu QuickSort

Object Storage Arubacloud
0 głosów
181 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ź 494 wizyt
pytanie zadane 8 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,610 p.)
0 głosów
1 odpowiedź 160 wizyt
pytanie zadane 29 października 2017 w Java przez barteku12 Obywatel (1,340 p.)
0 głosów
0 odpowiedzi 77 wizyt
pytanie zadane 18 kwietnia 2020 w Java przez princeV Nowicjusz (140 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...