快速排序

运用了分治思想,三步分治过程
    分解:数组A[p...r]被划分为两个子数组A[p...q-1]和A[q+1...r],其中左边数组元素都小于A[q],右边数组都大于A[q]
    解决:通过递归调用快速排序,对子数组 A[p...q-1]和A[q+1...r]进行排序
    合并:不需要合并操作

quicksort(A, p, r)
    q = PARTITION(A, p, r)
    quicksort(A, p, q-1)
    quicksort(A, q+1, r)

 PARTITION,即数组的划分是关键步骤
    PARTITIN(A, p, r)
        x = A[r]
        i = p - 1
        for j =   p  to   r-1
            if(A[j] <= x)
                i = i + 1
                exchange A[i] with A[j]
        exchange A[i+1] with A[r]
        return i + 1     即主元的位置
        
        i 保留了左边数组最靠右的位置(因此遇到比主元A[r]小的,i要自加,同时将比主元A[r]小的元素值交换到该位置);j则是遍历数组的位置;

    时间复杂度分析:如果每一层都出现最坏情况的划分,则时间复杂度为O(n^2);其他情况都为O(nlg n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值