快速排序

快速排序的平均时间复杂度:O(nlogn),高效,最优情况是:划分的两部分大小相等时
思路:选择最左边为基准值,将数组划分为两部分,这两部分再递归处理

  

public static void partition(int l,int r,int[]arr){
        //int arr[] = {};
        int t=0;
        int temp= 0;
        int left = l;
        int right = r;
        if(left>right){
            return;
        }
        //设置左边为基准值,并且存放到temp里,此时最左边的空间是空的
        temp = arr[l];
        
        while(left!=right){
            //下面操作在left=right时停止
            
            //从右边开始判断,寻找比基准值小的数,则停止运动
        while(arr[right]>=temp&&left<right){
                right--;
            }
        //从左边开始判断,寻找比基准值大的数,停止运动
        while(arr[left]<=temp&&left<right){
                left++;
            }
        //当左右停止运动,交换找到的两个值
        if(left<right){
                t=arr[left];
                arr[left]=arr[right];
                arr[right]=t;
            }
        }
        
        //最终将基准数归位
        arr[l]=arr[left];
        arr[left] = temp;    
        partition(l,left-1,arr);
        partition(left+1,r,arr);
    }

 

posted @ 2017-11-23 15:57  大一脚步  阅读(249)  评论(0编辑  收藏  举报