快速排序
算法体现分治法的部分:
核心部分:
用我自己的语言来说,PARTITON算法,将A[r]作为主元,在对数组扫描时,遇到比主元小的,就将其放到前面。(如果你要复述伪代码,在确定i,j的初始值的时候,建议拿个实例先试一试)
用循环不变式表示即为:
快速排序的另一种形式
快速排序,在第二版书里,算法的形式不像第三版这样,而是如下
(第10行A[j]应该改为A[i])
思想是任取一个主元(算法里取的是第一个元素),假设前半部分都得存小于它的,后半部分都得存大于它的,从两头开始向中间扫描,遇到不符合的,两两调换;直到扫描到同一个元素,那么这个元素就放到了排好序该在的位置。
快速排序的random形式
因为主元永远是最后一个元素,使得某些情况下,算法时间极其长,所以为了平摊给各种情况,在划分前,对主元做一次变换。
但想一想也知道,就连老师也说,这对时间复杂度没有任何的改进。
快速排序时间复杂度
最坏情况:当数组已经排好序了,O(n^2)
期望时间:O(nlgn)
标签:期末考,元素,扫描,主元,算法,排序,快速 来源: https://blog.csdn.net/weixin_43416013/article/details/112629588
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。