您的位置:首页 > 编程语言

算法代码:查找数组中第i小的元素

2015-09-24 21:18 399 查看
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
using namespace std;

void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}

int Partition(int A[], int p, int r)//将A[r]作为参考值,来划分数组,左边小于,右边大于(本来为快速排序的一部分)
{
int x = A[r];
int i = p-1;
for(int j = p; j < r; j ++)
if(A[j] <= x)
{
i++;
swap(A[i],A[j]);
}
swap(A[i+1],A[r]);

return i+1;
}

int Randomized_Partition(int A[], int p, int r)
{
srand((unsigned)time(NULL));
int i = (rand() % (r-p+1))+ p;//获取[p,r]之间的随机数
swap(A[r], A[i]);
return Partition(A, p, r);
}

int Randomized_Select(int A[], int p, int r, int i)
{
if(p == r)
{
return A[p];
}
int q = Randomized_Partition(A, p, r);
int k = q - p + 1;
if(i == k)
return A[q];
else if(i < k)
return Randomized_Select(A, p, q-1, i);
else
return Randomized_Select(A, q + 1, r, i - k);
}

int main()
{
int T, i = 1, n, a[100];
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
cin >> T;
n = T;

while(T--)
{
cin>>a[i];
i++;
}

cout<<Randomized_Select(a,1,8,5);

fclose(stdin);
//fclose(stdout);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: