作业帮 > 综合 > 作业

C语言实现快速查找给定一数组第N大的数.要求算法时间复杂度不得大于O(nlgn).

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/12 06:58:04
C语言实现快速查找给定一数组第N大的数.要求算法时间复杂度不得大于O(nlgn).
比如一数据为int arr[] = {29,10,23,24,55,20,84,27,68,11,21,77}; 第2大的数为77,第三大的数为68,第n大的数为...
C语言实现快速查找给定一数组第N大的数.要求算法时间复杂度不得大于O(nlgn).
快速排序、堆排序、归并排序的时间复杂度为O(nlgn).
用任意一种算法实现后,然后根据所输入的第N大的这个N,选择对应下标(N-1的位置)的数进行输出.
再问: 快速排序的时间复杂度在最坏的情况下应该是O(n*n)吧? 是否能实现比O(nlgn)更快的呢? 比如线性时间内?
再答: 平均的话,快速排序、堆排序、归并排序的时间复杂度为O(nlgn)。 当然,最坏情况快速排序的时间复杂度是O(n*n)。 如果说比O(nlgn)更快,平均时间里面没有符合要求的了。最快就是O(nlgn)。 (虽然最快的情况下插入排序和气泡排序O(n))。
再问: 我刚刚查了一下, 可实现在平均情况下O(n)复杂度的查找。 方法如下: 1. 对数组进行一下快速排序的划分, 也就是使k ( 0