内部排序之快速排序

      快速排序是由冒泡排序改进而来的,它的基本思想是:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入最终位置后,整个数据区间被此记录分割成两个子区间。所有关键字比该记录关键字小的放置在前子区间中,所有比它大的放置在后子区间中,并把该记录排在这两个子区间的蹭,这个过程叫一趟快速排序。之后对两个子区间分别重复以上过程,直到每个子区间只有一个记录。

      通常彩从两头向蹭扫描的办法,同时交换与基准记录逆序的记录。具体方法是:设两个指示器i和j,它们的初始值分别指向无序区中的第一个和最后一个记录。假设无序区中的记录为R[s..t],则i的初值为s,j的初值为t,首先将R[s]移至临时变量tmp中作为基准,令j自t起向左扫描直到R[i].key>tmp.key时,将R[i]移至j所指的位置上,依次重复直到i=j,此时所有R[k](k=s,s+1,...j-1)的关键字都小于tmp.key而所有R[k](k=j+1,j+2,...,t)的关键字必大于tmp.key,则可将tmp中的记录移至i所指位置R[i],它将无序区中的记录分割成R[s..j-1]和R[j+1..t],以便分别进行重复以上步骤进行排序。

 

 

      快速排序算法的时间复杂度是O(nlog2^n),而且快速排序是不稳定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值