1、问题描述:
对于长度为n的整型数组A,随机生成其数组元素值,然后实现一个线性时间的算法,在该数组中查找其中位数。
2、算法描述:
以原数组中位于中间位置k的元素作为基准值pivot,对原数组进行划分,分别为元素值< pivot、= pivot和> pivot的三部分,将这三部分的元素值分别赋给数组SL、SV、SR,并计算出SL、SV、SR中有效元素的个数sl、sv、sr。将k和sl、sv+sl、sl+sv+sr比较,如果k < sl,说明该数组的中项在SL数组中;如果k < sl+sv,说明该数组的中项在SV中;如果k < sl+sv+sr,说明该数组的中项在SR中。
/*
对于长度为n的整型数组A,随机生成其数组元素值,然后实现一个线性时间的算法,在该数组中查找其中项。
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
int selection(int data[], int n, int k);
int main()
{
int data[9];
int n = 9;
//随机生成数组元素值
for (int i = 0; i < n; ++i)
{
data[i] = rand();
cout << data[i] << ' ';
}
cout << endl;
if (n & 1) //如果有奇数个元素
{
cout << selection(data, n, n / 2) << endl;
}
else //如果有偶数