#include<iostream.h>
#include<string.h>
int process(int start,int tail,int b[]);
int find(int start,int tail,int k,int b[]);
void main()/*数列的第一个数和最后一个数不能相等,除非所有数都相等*/
{
int s;
int a,*b;
cout<<"输入数据的个数:"<<endl;
cin>>s;
cout<<"输入数据:"<<endl;
b=new int[s];
for(int i=0;i<s;i++)
cin>>b[i];
cout<<"输入查找第几小的数:"<<endl;
cin>>a;
cout<<"第"<<a<<"小的数为:";
cout<<find(0,s-1,a,b)<<endl;
cout<<"目前数列顺序为:"<<endl;
for(i=0;i<s;i++)
cout<<b[i]<<" ";
cout<<endl;
}
int process(int start,int tail,int b[])/*将数列分成以n/2为界线前半部分和后半部分,前半部分所有的数都小于后半部分任意一数*/
{
int i,j,temp,x;
i=start;
j=tail;
x=b[i];
do
{
while(b[j]>=x && j>i)
j=j-1;
if(j>i)
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
while(b[i]<=x && i<j)
i=i+1;
if(i<j)
{
temp=b[j];
b[j]=b[i];
b[i]=temp;
}
}
while(i!=j);
b[i]=x;
return i;
}
int find(int start,int tail,int k,int b[])
{
int p,q;
if(start==tail)
return b[start];
else
{
p=process(start,tail,b);
q=p-start+1;
if(k<=q)
return find(start,p,k,b);/*在前半部分查找*/
else
return find(p+1,tail,k-q,b);/*在后半部分查找*/
}
}
找第k小算法程序.rar_K.
版权申诉
121 浏览量
2022-09-23
06:28:14
上传
评论
收藏 10KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- 关于数据分析工具的问题 (Excel、PowerBI-Tableau、R-Python)-教程案例分享.zip
- jqueryUI管理后台+WeiXinApp微信小程序+uni例子内容 参数例子,学习用
- 基于聚类分析分批训练的BP神经网络回归分析
- 计算机大类学生课程实验心得、案例-基于Python 的图像处理实验.zip
- CocosDashboard-v2.1.3-win-042311.exe
- vue3-admin-master-后台管理平台模板.zip
- 基于yolov5和deepsort算法的车辆检测项目源码+数据集(高分项目).zip
- 使用Python的requests库和BeautifulSoup库进行网页爬取的示例案例
- 蓝色个人主页接单HTML源码.zip
- 基于YOLOv5+Deepsort实现车辆行人追踪和计数(完整源码+说明文档+数据).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈