快速排序

来源:互联网 发布:淘宝海报多少钱一张 编辑:程序博客网 时间:2024/06/16 04:52
运用了分治思想,三步分治过程
    分解:数组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)

0 0
原创粉丝点击