// 分治递归.cpp : 定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define MAX_VALUE 100
#define random() rand()%MAX_VALUE
#define N 10
#define MIDDLE 5
int a[N];
class Find
{
public:
void bubble(int first,int end) //冒泡排序
{
for(int i = first; i < end; i++)
for(int j = end; j > i; j--)
if(a[j]<a[j-1])
{
swap(a[j], a[j - 1]);
}
}
int partition(int p,int r,int x) //数组a中从a[p]到a[r]的元素按照x划分,大于x的在左边,小于x的在右边
{
int i = p - 1, j = r + 1;
while (1)
{
while (a[++i] < x && i < r);
while (a[--j] > x);
if (i >= j)
break;
swap(a[i], a[j]);
}
return j - 1;
}
int select(int p,int r,int k) //寻找中位数
{
if(r - p < 75)
{
bubble(p,r);
return a[p+k-1];
}
for(int i = 0; i < (r - p - 4) / 5; i++)
{
int s = p + 5 * i, t = s + 4;
bubble(s,t);
int temp = a[p + i];
a[p + i] = a[s + 2];
a[s + 2] = temp;
}
// 找中位数的中位数
int x = select(p, p + (r - p - 4) / 5, (r - p - 4) / 10);
int i = partition(p, r, x);
int j = i - p + 1;
if(k <= j)
return select(p, i, k);
else
return select(i + 1, r, k - j);
}
};
int main()
{
cout<<"请输入十个数:"<<endl;
srand((int)time(NULL));
for(int k = 0; k < N; k++)
{
cin>>a[k];
}
for(int k = 0; k < N; k++)
{
cout <<"a["<<k<<"]=" <<a[k] << "\t";
}
cout << endl;
Find f;
int n=MIDDLE;
cout << "中位数为 :" << f.select(0, N-1, n) << endl;
return 0;
}
digui.rar_分治法中位数
版权申诉
163 浏览量
2022-09-24
04:01:03
上传
评论
收藏 986B RAR 举报
JonSco
- 粉丝: 67
- 资源: 1万+
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0