java - QuickSort 给出错误的排序顺序

标签 java quicksort

我是 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/

相关文章:

java - 上传任何文件到服务器

string - 不敏感地对字符串列表进行排序

c++ - QuickSort 比 std::sort 慢

c - 仅使用两个不起作用的变量进行交换

java - 使用 ` LinkedBlockingQueue`可能会导致空指针异常

java - 在 Mac OS X 上使用 JTable 拖放

java - 可以将 netbeans 生成的窗口迁移到 Window Builder 中吗?

java - 如何在循环中添加带有背景图像的 JLabel

c++ - 按字母顺序和字符长度快速排序

Python quicksort - 列表理解与递归(分区例程)