问题描述:给定由n个互不相同的数组成的集合S以及正整数k≤n,试设计一个O(n)时间算法找出S中最接近S的中位数的k个数。

算法描述:

  1. 用线性时间选择实现的算法找到中位数
  2. S’=除去中位数外的S
  3. S"=|S'中的数值-中位数的值|
  4. 用线性时间选择实现的算法找到第k个最小的数
  5. 输出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 ;
}

最新文章

  1. 教你怎么半天搞定Docker
  2. HTTP Header详解(转载)
  3. 初识SQL Server Integration Service
  4. [tools]camtasia studio8.6
  5. NeHe OpenGL教程 第二课:多边形
  6. Session过期,跳出iframe等框架
  7. JTA事务管理--配置剖析
  8. CSS skills: 3) show sub-navigate items when mouse hove on nav-item
  9. iphone开发第一个UI应用程序QQ
  10. Android开发常见问题及解决方法
  11. 【Java】Java 序列化的高级认识
  12. HDU 5775 Bubble Sort
  13. iOS原生refresh(UIRefreshControl)
  14. 备份Rhythmbox播放器的曲目和播放列表信息
  15. 洛谷P2179 骑行川藏
  16. java获取request中的参数、java解析URL问号后的参数
  17. Windows 10下安装配置Caffe并支持GPU加速(修改版)
  18. Goland常用快捷键
  19. 怎么查看自己电脑的IP地址
  20. 如何检测NFC芯片型号?NFC手机即可!

热门文章

  1. 关于mysql启动问题---mysqld_safe mysqld from pid file * ended
  2. (原)使用 memcache 使用过程中可能遇到的问题
  3. bzoj3609 [Heoi2014]人人尽说江南好
  4. onload方法注意点
  5. interaction-oriented architecture - MVC
  6. WK 与 JS 的那些事
  7. 一.Mysql主从复制配置
  8. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)
  9. 2019.1.7 Mac的Vscode插件总结
  10. 面试准备——(二)专业知识(2)Python