Java 快速排序帮助-分区
我正在迭代和递归地实现自己的快速排序 当pivot右侧的数字大于而左侧的数字小于时,它将获得第一个分区 然而,我的分区似乎并没有划分右侧,只有左侧Java 快速排序帮助-分区,java,quicksort,Java,Quicksort,我正在迭代和递归地实现自己的快速排序 当pivot右侧的数字大于而左侧的数字小于时,它将获得第一个分区 然而,我的分区似乎并没有划分右侧,只有左侧 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.leng
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;
}
int[]数据={3,5,2,7,11,9,1,88,22};
公共void qSort(int[]数据,int左,int右){
int pivot=分区(数据,左,右);
pivot=partition(data,pivot,data.length-1);//仅针对右侧的测试示例
}
公共int分区(int[]数据,int左,int右){
int轴=左;
左++;
虽然(left实际上您的分区实现工作正常,但您将错误的left
参数传递到partition
中:
pivot = partition(data, pivot, data.length - 1); // Test example for right side only
应该是:
pivot = partition(data, pivot + 1, data.length - 1); // You need to exclude the pivot itself.
因为在您的实现中,您选择最左边的元素作为pivot,所以如果您在尝试对右侧部分进行分区时将pivot
作为left
参数传递,则所有内容都将保持不变,因为它已被分区。谢谢!在执行您的建议后,我成功地使其递归工作:)@ Ketameme,乐于助人:-顺便说一下,你不需要通过<代码> PIVOT 到左和右子分区,因为它已经在正确的位置。@ Ketameme,请考虑接受它作为解决方案,如果它真的解决了你的问题:-谢谢