快排again

public class Solution {
    /**
     * @param A: an integer array
     * @return: nothing
     */
    int partition(int[] A,int low,int high){
        int tmp = A[low];//这里容易出错,我写的是A[0]
        while(low < high){
            while(low < high && A[high] >= tmp)
                high--;
            A[low] = A[high];
            while(low < high && A[low] <= tmp)
                low++;
            A[high] = A[low];
        }
        A[low] = tmp;//注意:最后要把这个赋值
        return low;
    }
    void quicksort(int[] A,int low,int high){
        if(low < high){//这里是if
           int pivot = partition(A,low,high);
           //注意:这里pivot的位置已经排好了,所以下面不在包含它
           quicksort(A,low,pivot-1);
           quicksort(A,pivot+1,high);
        }
    }
    public void sortIntegers2(int[] A) {
        // write your code here

        quicksort(A,0,A.length-1);

    }
}

我依旧是只是会写,能看懂,会背代码!离大乘还远的很啊!
补充:
(1)注意,这里quicksort()内的参数是数组的长度减1 …….A.length - 1。
(2)划分中的第一行代码int tmp = A[low];,这个tmp是指low位置的值,第一次是0,但是后面的就不一定了。
(3)如果实在随机快速排序中,差异就是我选定的那个值pivot不再是数组的第一个了,而是随机产生的一个,但是在快速排序中,只要把这个选定的随机值放在第一个位置去即可。不过随机函数的产生到有点不同,如下:int index = r.nextInt(high - low) + low;
int pivot = nums[index];
。这个很重要。
(4)while中的条件:low < high。前后两个条件是可以交换的,安全!
(5)先从后向前移动,即第一个动的是high指针。然后将符合条件的那个值放入A[low]。
(6) 注意:最后要把这个赋值A[low] = tmp;这时候low和high指向了同一个位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值