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.