QuickSort代码示例。需要一点澄清

时间:2013-02-11 02:30:53

标签: java algorithm sorting quicksort

我是编程和java的新手,我正在尝试理解一个实现“quickSort”算法的代码,用于对数组进行排序。
now..i理解quicksort的基本思想,所以问题主要在于代码本身 在下面的代码中(partition()方法)我们有一个主循环(while(i< = j))和两个循环内部而不是另一个决策。我不明白的是,在主循环的每次迭代中都没有执行循环下的交换决策的原因是什么。简单来说,在最后一个while循环之后(while(arr [j]> pivot)j--;)为什么下面的条件没有执行?他们做j ++而不是代码应该在循环之外移动不是吗?正如我从这个例子中理解的那样......它不是!

这是我正在谈论的代码:

public  class QuickSort {

    public static int list[] = {1,56,7,34,1,1,4,25,100,85,250};

    public static int partition(int arr[],int left,int right){

        int i = left;
        int j = right;
        int tmp;
        int pivot = arr[(left + right) / 2];

        while(i<=j){
             while(arr[i]<pivot){
                 i++;
             }
             while(arr[j]>pivot){
                 j--;
             }
             if(i<=j){
                 tmp = arr[i];
                 arr[i] = arr[j];
                 arr[j] = tmp;
                 i++;
                 j--;
             }
        }
        return i;
    }


    public static void quickSort(int arr[],int left,int right){
        int index = partition(arr,left,right);
        if(left<index-1){
            quickSort(arr,left,index-1);
        }
        if(index<right){
            quickSort(arr,index,right);
        }
    }

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你只是谈论分区循环的最后一次迭代。

如果是这种情况,交换块未执行的原因仅仅是因为if条件不再成立,因为我已将一个位置停在j的右边。