算法导论--选择第k小的数字,期望时间为n
2017-04-12 16:43
260 查看
期望为线性时间的选择算法
代码:
#include<iostream>#include<string>
#include<memory.h>
#include<cstdio>
#include<string>
#define NUM 305
using namespace std;
int charaNum[NUM] ;//存放输入数据的数组
int tempArr[NUM];
int dis[NUM];
int Partion(int *A,int left ,int right)
{
int key = A[right];
int i = left -1;
for(int j = left;j<=right-1;j++)
{
if(A[j]<key)
{
i++;
swap(A[i],A[j]);
}
}
swap(A[i+1],A[right]);
return i+1;
}
int random_select(int * A,int left,int right,int i)
{
if(left == right)
{
return A[left];
}
int p = Partion(A,left,right);
int k = p-left+1;
if(i == k)
{
return A[p];
}
if(i<k)
{
return random_select(A,left,p-1,i);
}
if(i>k)
{
return random_select(A,p+1,right,i-k);
}
}
int main()
{
freopen("in.txt","r",stdin);
int num ;
while(cin>>num)
{
for(int i = 0;i<num;i++)
{
cin>>charaNum[i];
}
cout<<random_select(charaNum,0,num-1,5);
cout<<endl;
}
}
输入:
10 16 4 10 14 7 9 3 2 8 1
输出:
7相关文章推荐
- 找出第k小的数字-期望时间为O(n)-随机选择排序-源码
- 算法导论:第9章 中位数和顺序统计量_1期望为线性时间的选择算法
- 算法导论程序19-期望为线性时间的选择算法(Python)
- 《算法导论》笔记 第9章 9.2以期望线性时间做选择
- 《算法导论》笔记 第9章 9.2以期望线性时间做选择
- 分治算法:线性时间选择第k大小的数字 && STL函数:nth_element()
- 算法导论9.2以期望线性时间做选择
- 算法导论,9.3,最坏情线性时间的选择算法
- 以期望线性时间选择第i小的元素(9.2)
- 《算法导论》读书笔记之第9章 中位数和顺序统计学 最坏情况是线性时间的选择算法
- 快速选择(quick select) + 线性时间选择(linear-time select) - 求出n个数中第k大的数
- 线性时间选择第K小元素(随机化选择第K小元素)C++
- 算法--顺序统计-期望线性时间做选择
- 快速选择(quick select) + 线性时间选择(linear-time select) - 求出n个数中第k大的数
- Java 期望为线性时间的选择算法
- 《算法导论》笔记 第9章 9.3最坏情况线性时间选择
- 线性期望时间选择问题C语言
- 以期望的线性时间做选择---求最小最大元素
- 线性时间选择:从n个元素中找出第k小的元素
- 中位数和顺序统计,以线性期望时间做选择