我是 Java 新手,我正在尝试实现 QuickSort。 下面是我的脚本。
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] ={5,6,7,4,1,3};
QuickSort qs = new QuickSort();
qs.quickSort(a,0,a.length-1);
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
}
public void quickSort(int[] a,int left, int length) {
if(left >= length) return;
int index = partition(a,left,length);
if(left < index) {
quickSort(a,left,index-1);
}
else {
quickSort(a,index,length);
}
}
private int partition(int[] a,int l, int length) {
// TODO Auto-generated method stub
int left = l;
int right = length;
int pivot = a[(left+right)/2];
while(left <= right) {
while(left < length && a[left] < pivot) {
left++;
}
while(right >= 0 && a[right] > pivot) {
right--;
}
if(left <= right) {
int temp = a[left];
a[left]=a[right];
a[right]=temp;
left++;
right--;
}
}
return left;
}
}
当我打印解决方案时,我得到以下顺序 -
[1,3,6,4,5,7]
我无法找出错误,任何人都可以帮我解决这个问题。
最佳答案
只需更改此
if(left < index) {
quickSort(a,left,index-1);
}
else {
quickSort(a,index,length);
}
到此
quickSort(a,left,index-1);
quickSort(a,index+1,length);
因为您需要在数组的每个分区上递归地对数组进行排序!
关于java - QuickSort 给出错误的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373476/