博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中位数与第K小元素
阅读量:6800 次
发布时间:2019-06-26

本文共 1301 字,大约阅读时间需要 4 分钟。

算法实际上是模仿快速排序算法设计出来的,其基本思想也是对输入数组进行递归划分,与快速排序不同的是,它只对划分出来的子数组之一进行递归处理;

int randompartition(int a[],int l,int r){    int i=l-1,j=r,v=a[r],tmp;    for(;;)    {        while(a[++i]
v)if(j==l)break; if(i>=j)break; tmp=a[i]; a[i]=a[j]; a[j]=tmp; } tmp=a[i];a[i]=a[r];a[r]=tmp; return i;}

randompartition产生的划分基准是随机的,在这个条件下,可以证明算法randomselect可以在o(n)平均时间内找出n个输入元素的第k小元素。

消除randomselect尾递归的算法如下:

1 int randomselect(int a[],int l,int r,int k) 2 { 3     int i,j; 4     while(l
k)11 r=i-1;12 else13 {14 l=i+1;15 k-=j;16 }17 }18 return ((r

解决算法与数据结构实验题10.1神谕者:

1   2             #include
3 int a[50005]; 4 int randompartition(int a[],int l,int r) 5 { 6 int i=l-1,j=r,v=a[r],tmp; 7 for(;;) 8 { 9 while(a[++i]
v)if(j==l)break;11 if(i>=j)break;12 tmp=a[i];13 a[i]=a[j];14 a[j]=tmp;15 }16 tmp=a[i];a[i]=a[r];a[r]=tmp;17 return i;18 }19 int randomselect(int a[],int l,int r,int k)20 {21 int i,j;22 while(l
k)29 r=i-1;30 else31 {32 l=i+1;33 k-=j;34 }35 }36 return ((r
View Code

 

 

转载地址:http://hbuwl.baihongyu.com/

你可能感兴趣的文章
October CMS - 快速入门 7 显示列表和详情页
查看>>
Django之Ubuntu环境搭建
查看>>
webpack4+vue实现多页面,结合Hbuilder快速开发APP
查看>>
springCloud Finchley 微服务架构从入门到精通【八】断路器 Hystrix(feign)
查看>>
vue的axios组件如何与PHP后端交换数据
查看>>
Flutter教程(二) 了解Dart语言
查看>>
ES6 札记:let 和 const
查看>>
FCC 成都社区·前端周刊 第 8 期
查看>>
Ant Design Pro用小乌龟版的git提交时报错
查看>>
Laravel 中使用 puppeteer 采集异步加载的网页内容
查看>>
Python每日小知识(5):调用和定义函数
查看>>
Spring中使用ActiveMQ
查看>>
【数据结构】Java语言描述-循环链表和双向链表操作
查看>>
什么是跨域以及几种简单解决方案
查看>>
reactor-netty中TcpClient的create过程
查看>>
使用vue开发桌面应用(electron)
查看>>
pipenv 更优雅的管理你的python开发环境
查看>>
微信小程序生成二维码工具
查看>>
weex-android添加返回按钮监听
查看>>
Android精品源码,微信红包动画动画效果库输入框风格新闻客户端组件化方案...
查看>>