Ich implementiere meinen eigenen Quicksort iterativ und mit Rekursion.Quicksort Help - Partition
Es wird die erste Partition Geldstrafe, wo Zahlen auf der rechten Seite des Pivot größer als und links kleiner als sind.
Allerdings scheint meine Partition nicht die rechte Seite und nur die linke zu partitionieren.
int[] data = {3,5,2,7,11,9,1,88,22};
public void qSort(int[] data, int left, int right){
int pivot = partition(data,left,right);
pivot = partition(data,pivot,data.length-1); // Test example for right side only
}
public int partition(int[] data, int left, int right){
int pivot = left;
left++;
while (left <= right){
while ((left <= right) && (data[left] <= data[pivot])) {
left++;
}
while ((left <= right) && (data[right] >= data[pivot])){
right--;
}
if (left < right){
int temp = data[left];
data[left] = data[right];
data[right] = temp;
left++;
right--;
}
}
if (data[right] < data[pivot]){
int temp = data[right];
data[right] = data[pivot];
data[pivot] = temp;
pivot = right;
}
return pivot;
}
Jede Hilfe wäre willkommen, ich bin :(
stapfte
Danke! Ich habe es geschafft, es rekursiv zu arbeiten, nachdem Sie Ihren Vorschlag gemacht haben :) – Ketameme
@Ketameme, froh zu helfen :-) BTW, müssen Sie 'Pivot' weder zur linken noch zur rechten Unterpartition übergeben, weil es bereits in seiner rechten ist Ort. – shizhz
@Ketameme, bitte beachten Sie, es als Lösung zu akzeptieren, wenn es wirklich Ihr Problem löst :-) Danke – shizhz