Hallo, ich habe hier einen Quicksortcode der fast funktioniert, aber nur fast... Aus irgendeinem Grund werden nicht alle Zahlen sortiert, was ist hier falsch:
Beispiel: 3 und 2 werden nicht vertauscht
Beispiel: hier wird nur die 4 mit der 5 vertauscht
Java:
public class AufgabeQuicksort {
public static void main(String[] args) {
int[] array = {1, 3, 7, 2, 4, 8, 9, 6, 5};
// int[] array = {3, 2};
// int[] array = {2, 0, 2, 0, 5, 4};
// int[] array = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 2};
// int[] array = {44, 6, 55, 30, 94, 18};
int u = 0; // lowest array-element
int o = array.length - 1; // highest array-element
println("Unsorted Array: ");
for (int l = 0; l < array.length; l++) {
if (l < array.length - 1)
System.out.print(array[l] + ",");
else
System.out.println(array[l]);
}
quicksortAlg(array, u, o);
System.out.println("Finished: ");
for (int l = 0; l < array.length; l++) {
if (l < array.length - 1)
System.out.print(array[l] + ",");
else
System.out.println(array[l]);
}
}
// ============== Quicksort algorithm ================
public static void quicksortAlg(int[] sortArray, int u, int o) {
int index;
System.out.println("o: " + o);
if (o > u + 1) {
index = partition(sortArray, u, o);
u = index;
quicksortAlg(sortArray, index++, o);
quicksortAlg(sortArray, u, index--);
}
}
// ==================== Function partition ====================
public static int partition(int[] arrayDivide, int u, int o) {
int index = u;
int p = o; // Index from pivot-element
System.out.print("Pivot-element: " + arrayDivide[p] + " |");
for (int pointer = u; pointer < o; pointer++) {
if (arrayDivide[pointer] <= arrayDivide[p]) {
swap(arrayDivide, index, pointer);
index++;
}
}
swap(arrayDivide, index, p);
// print arrayDivide on the console
for (int l = 0; l < arrayDivide.length; l++) {
if (l < arrayDivide.length - 1)
System.out.print(arrayDivide[l] + ",");
else
System.out.println(arrayDivide[l]);
}
return index;
}
// ======== Function to switch array-elements ==============
public static void swap(int[] arraySwap, int idx1, int idx2) {
int tmp = arraySwap[idx1];
arraySwap[idx1] = arraySwap[idx2];
arraySwap[idx2] = tmp;
}
}
Beispiel: 3 und 2 werden nicht vertauscht
Java:
Unsorted Array:
1,3,7,2,4,8,9,6,5
o: 8
Pivot-element: 5 |1,3,2,4,5,8,9,6,7
o: 8
Pivot-element: 7 |1,3,2,4,5,6,7,8,9
o: 8
Pivot-element: 9 |1,3,2,4,5,6,7,8,9
o: 8
o: 9
o: 7
o: 5
Finished:
1,3,2,4,5,6,7,8,9
Beispiel: hier wird nur die 4 mit der 5 vertauscht
Java:
Unsorted Array:
2,0,2,0,5,4
o: 5
Pivot-element: 4 |2,0,2,0,4,5
o: 5
o: 5
Finished:
2,0,2,0,4,5