快排算法quickSort

这篇博客详细介绍了快速排序算法的时间复杂度和推导思想,平均时间复杂度为O(nlog(n)),最坏情况为O(n*n)。文章通过二叉树模型解释了时间复杂度,并展示了如何通过数学推导得到n*lg(n)的复杂度。此外,还阐述了快排的实现原理,包括选择基准点、分割数组以及递归调用的过程,并提供了Java代码示例。
摘要由CSDN通过智能技术生成

感觉在网上查找到的有关quickSort的资料都不是很详细或简洁,特把自己的理解做个总结,记录,以待分享。

1、时间复杂度及推导思想:

快排的平均时间复杂度为O(nlog(n)),最差为O(n*n)。

其时间复杂度的推到可利用二叉树的思想:切分的次数是树高n,查找的次数为logn,总的时间复杂度为nlog(n)。

数学推导思想:首先我们请注意到,所有实际的排序操作都在partition中做完的,因为排序从根本上来讲还是元素的交换,那么在partition函数中进行了多少次比较就是整个算法复杂度的关键。

如果将A中的元素排列成S (z1,z2,…,zn),zi表示第i小元素。在整个排序过程中,任意两个元素最多比较一次。如果我们定义一个变量Xij,当zi和zj发生比较时为1,否则为0。那么

把对所有可ij求和Xij就得到全部的比较次数。我们对这个和求期望,根据期望的线性性,也就是zi和zj发生比较的概率的总和。

那么zi和zj发生比较的概率是多少呢?在Sij这个子集合里,只有zi或zj被选为pivot的时候他们才会有比较,而平均来讲,这个概率是2/(j-i+1)。这就是S中任意两个元素发生比较的概

率。如果不在这个集合里呢?

因此所有比较次数的表达式是Sum(2/(j-i+1)), i从1到n-1,j从i+1到n。

他可以变形为n个Sum(2/k)k从1到n。

最终得到n*lg(n)。

2、实现的原理及

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值