我用java写了一个快速排序,但结果有问题,请教大神

这是我自己写的一个快速排序,但我测试后发现错误。自己看了好多遍还是不知道哪错了,希望大神解答。

 package 第二阶段代码;
//快速排序
public class Quick {

    public static void Sort(int[] arr) {//使用sort方法传递一个数组,并调用method()方法
        method(arr,0,arr.length-1);
    }

    private static void method(int[] arr, int first, int last) {//method()方法,定义两个索引
        if(last <= first) {//当前后两个索引相交时,停止排序
            return;
        }
        int number = getNumber(arr,first,last);//获取切分点
        method(arr,first,number - 1);//以切分点为界,左边的数组进行排序
        method(arr,number + 1, last);//以切分点为界,右边的数组进行排序
    }

    private static int getNumber(int[] arr, int first, int last) {//获取切分点
        int i = first, j = last + 1;//获取数组两边的指针(即从两边开始移动)
        int choice = arr[first];//把第一个元素的值定义为切分点

        while(true) {

            while(arr[++i] < choice) {//当左边的数小于切分点,继续运行
                if(i == last) {//当左边的数大于切分点时,跳出循环
                    break;
                }
            }
            while(choice <  arr[--j]) {//当右边的数大于切分点,继续运行
                if(j == first) {//当右边的数小于切分点时,跳出循环
                    break;
                }
            }
            if(i >= j) {//两者相交时退出方法
                break;
            }
            int temp = arr[j];//调换位置
            arr[j] = arr[i];
            arr[i] = temp;
        }

        int temp2 = choice;//把切分点移动中间
        choice = arr[j];
        arr[j] = temp2;


        return j;
    }

}

http://blog.csdn.net/wangkuifeng0118/article/details/7286332