算法设计--查找无序数组中第K大的数字
来源:互联网 发布:doom4优化 编辑:程序博客网 时间:2024/05/19 23:13
给出一个数组,要求查找出这个数组中按顺序排第K大的数字。
思路:利用快速排序的思想,把数组中的元素分治,并计算中间值的位置,如果是K,则这个数就是第K大的数字,如果比K小,那么再次利用快速排序分治中值以后的数据,如果比K大,则排序前面的数字,直到找到K的位置。
下面给出C++实现的代码:
#include <cstdlib>#include <iostream>using namespace std;int partition(int data[],int first,int last) //¿ìËÙÅÅÐòµÄ·Öλ {int pivot=data[first];while(first<last){while(first<last&&data[last]>pivot) last--; data[first]=data[last];while(first<last&&data[first]<pivot)first++; data[last]=data[first]; }data[first]=pivot;return first; }int findKth(int data[],int first,int last,int k){int kth;if(first==last) kth=data[first];else{int pivot=data[first]; //Ïȸø¼Ç¼ÏÂÀ´ int splitPoint=partition(data,first,last); //ÕâÊÇÿһ´Î·Ö¸îµÄµãλ if(k<splitPoint)kth=findKth(data,first,splitPoint-1,k);else if(k>splitPoint) kth=findKth(data,splitPoint+1,last,k);else kth=pivot; } return kth;}int main(int argc, char *argv[]){ int a[11]={-1,11,17,18,5,7,14,9,6,27,21}; //ÕýÈ·µÄ˳ÐòÊÇ£º5,6,7,9,11,14,17,18,21,27 int t=findKth(a,1,10,6); cout<<t<<endl; system("PAUSE"); return EXIT_SUCCESS;}
- 算法设计--查找无序数组中第K大的数字
- 算法之每日一题:找出无序数组中第k大的数字
- 寻找单个无序数组中第K小的数字
- 一个无序数组中第K大的元素
- 由无序数组中找到第K 大的元素
- 无序数组中找到第k大的元素
- 寻找无序数组中第k大的数
- 在无序数组中找到第k大的数
- 如何在N个无序数组元素中,查找第K大元素
- 算法学习 - 查找第K大的数字
- java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
- 查找一个无序数列中第k个大的元素
- 在一个无序整型数组中找出第k小的数字
- 无序数组找出其中的第K大的数
- 求无序数组第K大的数
- O(n)算法得到数组中任意第k大的数字
- 面试题—— 找出一个无序整型数组中第k大的数。
- 寻找无序数组中第k大的数——快排思想
- Windows 下 Nginx + PHP5 的安装与配置
- myeclipse提示
- Linux网络编程epoll模型
- 有关位图的几点总结
- ACCESS请求
- 算法设计--查找无序数组中第K大的数字
- C++ 虚函数表解析
- 中国国家气象局天气预报信息接口
- 如何更有效的发布招聘信息
- 使用mm单独编译android的APP时出现错误
- 直接运行内存中的程序
- VS addin 例子(附源码)
- 和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
- 我自己写的一个makefile,研究了2周,写的还是这么粗糙,惭愧。。