3
我正在迭代實現自己的快速排序和遞歸。快速排序幫助 - 分區
它獲得第一個分區罰款,其中樞軸右側的數字大於和左側小於。
但是,我的分區似乎沒有劃分右側,只有左側。
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;
}
任何幫助,將不勝感激,我難倒:(
謝謝!我設法讓你的建議後遞歸地工作:) – Ketameme
@Ketameme,很高興幫助:-)順便說一句,你不需要將'pivot'傳遞給左側和右側的子分區,因爲它已經在它的右側地點。 – shizhz
@Ketameme,請考慮接受它作爲解決方案,如果它真的解決您的問題:-)謝謝 – shizhz