分治与递归-找k个临近中位数的数
2024-09-04 12:06:36
问题描述:给定由n个互不相同的数组成的集合S以及正整数k≤n,试设计一个O(n)时间算法找出S中最接近S的中位数的k个数。
算法描述:
- 用线性时间选择实现的算法找到中位数
- S’=除去中位数外的S
- S"=|S'中的数值-中位数的值|
- 用线性时间选择实现的算法找到第k个最小的数
- 输出S”中小于第k个最小的数的数对应的S中的值
算法实现:
selectorder函数、partition函数、sord函数同线性时间选择程序的算法实现,故略。
int main()
{
void sord(int a[],int h,int t);
int selectorder(int x,int a[],int h,int t);
int partition(int a[],int h,int t,int k);
int n;
scanf("%d",&n);
int *a;
a=(int *)malloc(sizeof(int)*n);
for(int i=;i<n;i++)
a[i]=rand();
for(int i=;i<n;i++)
printf("%d ",a[i]);
//动态分配数组a
//随机生成数组a元素、输出
/*
int n=7;
int a[7]={0,-1,20,-4,-100,2000,2001};
for(int i=0;i<n;i++)
printf("%d ",a[i]);
*/
printf("\n");
int middle;
middle=selectorder((n-)/,a,,n-);
printf("%d\n",middle);
//找到数组a中的中位数并赋值给middle
int *b;
b=(int *)malloc(sizeof(int)*n);
for(int i=;i<n;i++)
if(a[i]>=middle)b[i]=a[i]-middle;
else b[i]=middle-a[i];
//动态分配数组b
//数组b中元素=|数组a中元素-middle|
int *c;
c=(int *)malloc(sizeof(int)*n);
for(int i=;i<n;i++)c[i]=b[i];
//数组c中元素=数组b中元素
int k;
scanf("%d",&k);
//输入k
int last;
last=selectorder(k-,b,,n-);
//找到数组b中第k小元素并赋值给last
for(int i=;i<n;i++)
if(c[i]<=last)printf("%d ",a[i]);
//遍历数组c,如果数组c中元素小于last,
//则输出对应位置上数组a的元素
printf("\n");
sord(a,,n-);
for(int i=;i<n;i++)printf("%d ",a[i]);
return ;
}
最新文章
- 教你怎么半天搞定Docker
- HTTP Header详解(转载)
- 初识SQL Server Integration Service
- [tools]camtasia studio8.6
- NeHe OpenGL教程 第二课:多边形
- Session过期,跳出iframe等框架
- JTA事务管理--配置剖析
- CSS skills: 3) show sub-navigate items when mouse hove on nav-item
- iphone开发第一个UI应用程序QQ
- Android开发常见问题及解决方法
- 【Java】Java 序列化的高级认识
- HDU 5775 Bubble Sort
- iOS原生refresh(UIRefreshControl)
- 备份Rhythmbox播放器的曲目和播放列表信息
- 洛谷P2179 骑行川藏
- java获取request中的参数、java解析URL问号后的参数
- Windows 10下安装配置Caffe并支持GPU加速(修改版)
- Goland常用快捷键
- 怎么查看自己电脑的IP地址
- 如何检测NFC芯片型号?NFC手机即可!
热门文章
- 关于mysql启动问题---mysqld_safe mysqld from pid file * ended
- (原)使用 memcache 使用过程中可能遇到的问题
- bzoj3609 [Heoi2014]人人尽说江南好
- onload方法注意点
- interaction-oriented architecture - MVC
- WK 与 JS 的那些事
- 一.Mysql主从复制配置
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)
- 2019.1.7 Mac的Vscode插件总结
- 面试准备——(二)专业知识(2)Python