关于快速排序,但是结果不正确,求大神解答,java编写

public class QuickSort {
public static void main(String[] args){
int[] a={12,22,11,3,13,45,6,33,22,5,6,2,1,12};
show(a);
sort(a, 0, a.length - 1);
show(a);
}

public static void show(int a[]){
    for(int i=0;i<a.length;i++)
        System.out.print(a[i] + "  ");
    System.out.println();
}

public static void sort(int[] a, int begin, int end){
    if(end-begin<=1)
        return;

    int key=a[begin];//基准
    int p1=begin;
    int p2=end;
    boolean bool=true;//默认为true的时候从右向左比较

L1: while (p1 if(bool){
for(int i=p2;i>p1;i--){
if(a[i]<=key){
a[p1]=a[i];
p1++;
p2=i;
bool=false;
continue L1;
}
}
p2=p1;

        }else {
            for(int i=p1;i<p2;i++){
                if(a[i]>=key){
                    a[p2]=a[i];
                    p2--;
                    p1=i;
                    bool=true;
                    continue L1;
                }
            }
            p1=p2;
        }
    }
    a[p1]=key;
    sort(a, begin, p1 - 1);
    sort(a, p1 + 1, end);
}

数据原来序列:12 22 11 3 13 45 6 33 22 5 6 2 1 12

输出的结果:1 2 3 5 6 6 11 12 12 22 13 22 45 33

http://blog.csdn.net/havedream_one/article/details/46315305

兄弟,看样子你对快排理解的不太对。

public static int getPivotIndex(int[] array, int begin, int end) {
    int index = 0;
    int pivot = array[begin];
    while (begin < end) {
        while ((array[end] > pivot) && (begin < end)) {
            end--;
        }
        array[begin] = array[end];

        while ((array[begin] < pivot) && (begin < end)) {
            begin++;
        }
        array[end] = array[begin];

        if (begin >= end) {
            array[end] = pivot;
            index = end;
        }
    }
    return index;

}

一次快排后,应该返回轴的index,这个没有问题吧

核心这块,可以用填坑思想来理解,最后一个元素与轴比较,如果大,index--,否则把当前的值交换到begin的位置,然后开始比较begin与轴的大小,如果小index++,

否则把当前值与end交换,最后begin与end相交的时候,把轴的值填到相交的位置出,并返回index就可以了。

兄弟,看样子你对快排理解的不太对。

public static int getPivotIndex(int[] array, int begin, int end) {
    int index = 0;
    int pivot = array[begin];
    while (begin < end) {
        while ((array[end] > pivot) && (begin < end)) {
            end--;
        }
        array[begin] = array[end];

        while ((array[begin] < pivot) && (begin < end)) {
            begin++;
        }
        array[end] = array[begin];

        if (begin >= end) {
            array[end] = pivot;
            index = end;
        }
    }
    return index;

}

一次快排后,应该返回轴的index,这个没有问题吧

核心这块,可以用填坑思想来理解,最后一个元素与轴比较,如果大,index--,否则把当前的值交换到begin的位置,然后开始比较begin与轴的大小,如果小index++,

否则把当前值与end交换,最后begin与end相交的时候,把轴的值填到相交的位置出,并返回index就可以了。