快速排序 java实现

之前面试的时候碰到一道快速排序的题目,一直不太理解,今天学了一会,整理如下:

参考 https://blog.csdn.net/shujuelin/article/details/82423852

 

public static void qsort(int[] arr,int low,int high){
        int i,j,temp,t;
        if(low>high){
            return;
        }
        i=low;
        j=high;
        //temp就是基准位
        temp = arr[low];

        while (i<j) {
            //先看右边,依次往左递减
            while (i<j&&temp<=arr[j]) {
                j--;
            }
            //再看左边,依次往右递增
            while (i<j&&temp>=arr[i]) {
                i++;
            }
            //如果满足条件则交换
            if (i<j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }

        }
        //最后将基准为与i和j相等位置的数字交换
        arr[low] = arr[i];
        arr[i] = temp;
        //递归调用左半数组
        qsort(arr, low, j-1);
        //递归调用右半数组
        qsort(arr, j+1, high);
    }

我把while里面的判断改了一下,当i和j的比较为false之后就应该短路掉剩下那个判断。

posted @ 2019-03-14 14:03  白诗  阅读(126)  评论(0编辑  收藏  举报