标签:排序 Algorithm 算法 划分 codes 实验报告 Project6 Class
实验报告 |
---|
课程名称 |
学生姓名 |
实验名称 |
实验地点 |
1. |
给定N个数,求其中第K小的数 |
2. |
如果使用快速排序或者其他高效的排序算法,可以在O(nlogn)的时间下轻松得出第k小 |
考虑如何改进快速排序来减小复杂度,我们发现快排中,划分实际上是从数组a[l - r]中选取一个主元,使l到x的所有元素小于等于x,x到r的所有元素大于等于x,这样就能确定x的最终位置 |
也就是说每划分一次就能确定这个主元的最终位置,于是试图去构造第k个位置 |
所以只需要某次划分的q为第k个小标的时候,其实就已经找到了答案,而其左右是否有序不用考虑 |
于是划分时如果q = k就返回a[q],如果q比目标下标小,就递归右区间,否则递归左区间即可 |
3. |
QUCIK_SELECT(L,R,K) |
4. |
类似快速排序的分析方法,可以知道上述算法最坏情况是O(n^2)的。而该算法的平均性能比较好,又因为是随机化的,因此不存在哪种输入会导致最坏情况发生,通过分析该函数的期望运行时间E[T(n)]=O(n),得出,在期望的线性时间内,我们可以找到任一顺序统计量,特别是中位数。 |
5. |
Algorithm-Class-codes/project6 at main · MQFLLY/Algorithm-Class-codes (github.com) |
标签:排序,Algorithm,算法,划分,codes,实验报告,Project6,Class 来源: https://www.cnblogs.com/hznumqf/p/14891773.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。