快速排序(Java)

129 阅读1分钟
@Test//快速排序
public void test(){
    int[] nums = {12,23,9,6,34,54,21,43,77,45,45,66,734,23,11,22,1,3,4,6};
    go(0,nums.length-1);
    System.out.println("快速排序:"+Arrays.toString(nums));
}

public void go(int left, int right){
    //终止递归的条件
    if(left>=right)return;
    //记录初始的头尾
    int lt = left;
    int rt = right;

    int key = nums[left];
    while(left<right){
        //从后半部分向前扫描
        while(left<right&&nums[right]>=key) right--;
        //思考一下这里为什么可以是赋值,而不是交换
        nums[left] = nums[right];
        //从前半部分向后扫描
        while(left<right&&nums[left]<=key) left++;
        nums[right] = nums[left];
    }
    nums[left] = key;

    //递归继续排序左右部分
    go(lt,left-1);
    go(left+1,rt);
}