快速排序,正如它的名字所体现,是在实践中已知的最快的排序算法,平均运行时间为O(NlogN),最坏的运行时间为O(N^2)。算法的基本思想很简单,然而想要写出一个高效的快速排序算法并不是那么简单。基准的选择,米素的分割等都至关重要,如果你不清楚如何优化快速排序算法,本文你不该错过。
算法思想
快速排序利用了分治的策略。而分治的基本基本思想是:将原问题划分为若干与原问题类似子问题,解决这些子问题,将子问题的解组成原问题的解。
那么如何利用分治的思想对数据进行排序呢?假如有一个米素 *** A:
选择A中的任意一个米素pivot,该米素作为基准
将小于基准的米素移到左边,大于基准的米素移到右边(分区操作)
A被pivot分为两部分,继续对剩下的两部分做同样的处理
直到所有子集米素不再需要进行上述步骤
可以看到算法思想比较简单,然而上述步骤实际又该如何处理呢?
如何选择基准
实际上无论怎么选择基准,都不会影响排序结果,但是不同的选择却可能影响整体排序时间,因为基准选择不同,会导致分割的两个 *** 大小不同,如果分割之后,两个 *** 大小是几乎相等的,那么我们整体分割的次数显然也会减少,这样整体耗费的时间也相应降低。我们来看一下有哪些可选择策略。
选择之一个或者最后一个
如果待排序数是随机的,那么选择之一个或者最后一个作基准是没有什么问题的,这也是我们最常见到的选择方案。但如果待排序数据已经排好序的,就会产生一个很糟糕的分割。几乎所有的数据都被分割到一个 *** 中,而另一个 *** 没有数据。这样的情况下,时间花费了,却没有做太多实事。而它的时间复杂度就是最差的情况O(N^2)。因此这种策略是绝对不推荐的。
单机刷刷刷手游最近上线了,这个游戏玩法还是蛮多的,除了常规玩法,还有世界boss玩法,挑战世界boss可以获取很多的奖励,那么,世界boss怎么打呢,游戏中很多小伙伴不知道世界BOSS奖励及打法,也不...
现如今愈来愈多的人挑选自己创业的路面。但大家都知道项目投资与风险性相伴而生,针对许多 沒有工作经验的人而言,如何开一家小成本费的零食店?实际上,开一家零食店的方法有二种,加盟代理和自己创业。可是都需要...
近期有许多 北京当地的盆友在后台管理留言板留言,想掌握有关北京海外女学妹价钱手机微信、QQ、电話、价钱、相片、视頻、所属企业、预定步骤及商务伴游手机微信等信息内容,北京益萌模特预约服务平台以便便捷大伙...
新加坡外场小学妹,新加坡外围经纪人【董静雯】,上海市是一座成功者的集中地,对商业服务女学妹的要求也是较为大的,今日大牌明星兼职模特共享女学妹访梦,年纪广州市 女 70,婚姻生活:单身,文凭:普通高中,...
做黑客必须具备的语言有哪些? UNIX/LINUX这种操作系统就是用C语言写的,是最强大的计算机语言,于上世纪70年由丹尼斯瑞切开发。想成为一名黑客,必须掌握C语言。Interpreted Langu...
新智元讯 中国北京时间7月12日早上信息,网络黑客正再度证实,不管客户采用了是多少网络信息安全防范措施,网络黑客只需一个手机号就能跟踪到客户部位,并把握客户的语音通话和信息内容。 法国网络信息安全研...