快速排序

1、它是排序中最佳的实用选择:平均性能相当好,Θ(nlgn),其中的常数因子很小

2、基于分治模式

3、就地排序


一、描述

初始化数据:A[p...q]

分治过程的三步骤:

分解:把A[p...q]划分为两个子数组:A[p...r-1]和A[r+1...q],其中满足,A[p..r-1]中每个元素 < A(r) < A[r+1...q]

解决:递归对子数据排序

合并:因为两个子数组是就地排序,故整个数组已排序


快速排序递归算法:

quickSort(A, p, q) {

if (p < q) {

         r  =  partition(A, p, q) //取得划分值

 quickSort(A, p, r-1)

     quickSort(A, r+1, q)

     }

}


划分过程:

partition(A, p, q) {

x = A[q] //取最后一个元素为基准

i = p-1

for (j=p to q-1) {

if (A[j] <= x) {

i ++

swap(A[i], A[j])

}

}

swap(A[i+1], A[q])

return i+1;

}

注:其中,A[p...i]是小区,A[i+1...j-1]是大区


二、性能分析

最坏:T(n) = T(n-1) + T(0) +Θ(n) = Θ(n2)

最好:T(n) = 2T(n/2) + Θ(n) = Θ(nlgn)

平均:T(n) = Θ(nlgn)














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值