求中位数。
来源:互联网 发布:macbook pro windows 编辑:程序博客网 时间:2024/04/28 05:16
//在网上找了好久,没有找到求一个行列均递增二维矩阵的中位数算法,于是自己花了几天的时间去摸索一下求一个数组的中位数算法,本算法不只是求中位数,可以求出你想求/////的///第K小的元素,
//不废话,上代码。。
//要多思考,每一步的思想,即使我没有给出每一步的算法解释,,有疑问的话可以下面评论。。
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int partition(char *s, int p, int r)
{
int tmp = s[r];
int i = p - 1;
for (int j = p; j < r - 1; j++)
{
if (s[j] < tmp)
{
i++;
int temp = s[i];
s[i] = s[j];
temp = s[i];
}
}
int trp = s[i + 1];
s[i + 1] = s[r];
s[r] = trp;
return i + 1;
}
int randomizedpartition(char *s, int p, int r)
{
int i=p + rand() % (r - p + 1);//产生p,r中任意一个随意数字;
int temp = s[r];
s[r] = s[i];
s[i] = temp;
return partition(s, p, r);
}
int randomizedselect(char *s, int p, int r, int i)//输出数组s中第i小的元素。
{
if (p == r)
return s[p];
int q = randomizedpartition(s, p, r);
int k = q - p + 1;
if (i == k)
return s[q];
else
if (i < k)
return randomizedselect(s, p, q - 1, i);
else
return randomizedselect(s, q + 1, r, i - k);
}
//测试函数:
int main()
{
char s[] = {29, 7, 8, 6, 54, 20, 1 };
int num = sizeof(s) / sizeof(s[0]);
int num1 = randomizedselect(s, 0, num - 1, num / 2);
cout << num1 << " ";
return 0;
}
- 求中位数
- 求中位数。
- 求中位数
- 海量数据处理-求中位数
- 求中位数!面试题
- 大规模正整数求中位数
- 求中位数!面试题
- 海量整数,求中位数
- OJ_1004 Median 求中位数
- 不排序求中位数
- hiveUDAF求中位数
- Problem G: 求中位数
- 俩数组求中位数
- 求中位数的问题
- 求两数组中位数
- Spark入门--求中位数
- 求两数组中位数
- 求数据流中的中位数
- VS2013在文件中查找时无法显示查找结果
- 天声人語 20151026 「政治的」なものの忌避
- 76Minimum Window Substring
- Microsoft Dynamics CRM4.0学习笔记(一)
- Android 理解生命周期最好例子—按home暂停音乐播放,跳转暂停
- 求中位数。
- 由外之内的创建类(Construct classes from the outside in)
- 机器学习中防止过拟合的处理方法
- 论架构师的自我修养
- hibernate.hbm2ddl.auto配置详解
- 第一次驱动hello
- 浅谈三层架构
- 关于iphone accessory的理解
- hdu 4605 Magic Ball Game(可持久化笛卡尔树)