线性时间内求数组中的 第k小数
2013-06-27 21:07
134 查看
只在快拍的基础上改了一点点 与快速排序算法不同的是,我们关注的并不是元素的左右两边,而仅仅是某一边
#include<iostream> using namespace std; int a[100]; int p(int left,int right) { int t,temp=a[left]; while(left<right) { while(left<right&&a[left]<=temp) left++; while(left<right&&a[right]>=temp) right--; } return left; } int pai(int low,int high,int m) { int u; u=p(low,high); if(u==m) return a[u]; else if(u>m) return pai(low,u-1,m); else return pai(u+1,high,m); } int main() { int i,j,m,n; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); scanf("%d",&m); //在数组a中找第 m小的 int w=pai(0,n-1,m); printf("%d",w); return 0; }
相关文章推荐
- 线性时间复杂度求数组中第K大数
- 用线性时间复杂度实现找出数组中出现一次的元素
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 用线性时间复杂度实现找出数组中出现一次的元素
- 线性时间常数空间找到数组中数目超过n/5的所有元素
- 算法导论标准版快速排序和线性时间求解数组第K小数
- 线性时间复杂度求数组中第K大数
- 用线性时间复杂度实现找出数组中出现一次的元素
- 深入线性时间复杂度求数组中第K大数的方法详解
- 线性时间复杂度求数组中第K大的数
- 最大子数组问题---线性时间算法(转)
- 无序数组A和B,线性时间复杂度,空间复杂度O(1) ,求中位数
- 算法导论4.1-3~4.1-5最大子数组暴力算法和递归算法的实现和线性时间算法实现
- 线性时间复杂度求数组第n大
- 线性时间选出一个数组中第i大的数
- 线性时间复杂度求数组中第K大数
- 在数组A中寻找第k小的元素-最坏情况为线性时间的算法
- 最大子数组之和(线性时间复杂度,C语言实现)
- 算法导论 4.1-5 最大子数组问题 线性时间算法 C++简单实现
- 线性时间查找数量超过数组长度一半的数