java快速排序(注释详细)

时间复杂度:O(n*logn)
public static  void quickSort(int[] nums,int m,int n){
        if(m<n){
        int i = split(nums,m,n);//找到经过一次划分后KEY的位置
        quickSort(nums,m,i-1);//对KEY左边再次划分为两部分
        quickSort(nums,i+1,n);//对KEY右边再次划分
        }
    }
    public static int split(int[] nums,int m,int n){
        int right,left,key;
        left = m;
        right =n;
        key = nums[left];
        while(left < right){
            //从最右边开始扫描 如果找不到比key小的 就一直往左找
            while((left<right)&&(nums[right]>key)){
                right--;
            }
            //找到比KEY小的,跳出循环,交换高低位的值
                nums[left] = nums[right];
           
            //从左边开始扫描 如果找不到比key大的 就一直往右找
            while((left<right)&&(nums[left]<key)){
                left++;
            }
             //找到比KEY大的,跳出循环,交换高低位的值
               nums[right] = nums[left];    
        }
        nums[left] = key;//一次划分结束后把KEY复制给LEFT = RIGHT位置,左边的都比KEY小,右边的都比KEY大
        return left;
    }

你可能感兴趣的:(java快速排序(注释详细))