前言:编程之美上并没有给出实际的代码,这里我参考yoona博主的做法自己也写了一遍,并记录下来。
与此相似的题目是:
- 求第k大的数
- 求第k小的数
这里给出比较好的两个做法,分别是快排思想和堆思想,至于怎么做的这里就不重述了,直接上代码。
快排思想解
int quicksort_cut(int arr[],int left,int right)
{
if (arr == NULL || left >= right)
{
return -1;
}
int i,j,temp;
i = left; j = right;
temp = arr[left];
while(i<j)
{
while(temp > arr[j] && i < j)
j--;
if (i<j){
arr[i] = arr[j];
i++;
}
while(temp <= arr[i] && i < j)
i++;
if (i<j){
arr[j] = arr[i];
j--;
}
}
//此时 i==j
arr[i] = temp;
return i;
}
int get_k_bigs(int arr[],int left,int right,int k)
{
int cut_index,n;
if (left >= right || arr ==

这篇博客介绍了如何利用快速排序和堆的思想解决找到数组中第k大的数的问题。提供了相关测试代码,并强调在大数据量情况下堆方法的优势。文章还表达了知识迁移和灵活应用的重要性,以及对原博主的感谢。
最低0.47元/天 解锁文章
2279

被折叠的 条评论
为什么被折叠?



