本文实例讲述了C++算法之在无序数组中选择第k小个数的实现方法。分享给大家供大家参考,具体如下:

从一个无序的整型数组中选出第k小的数,如k=1为最小数,k=n为最大数。这里数组可以是有重复的值!
下面是自己写的一个函数,记在此处来记忆我留下的痕迹!
//选择无序数组中第k小的数
#include <iostream>
using namespace std ;
bool failed = false ;
//这里只考虑数组是int型的
int findnumber(int *array,int start , int end, int k)
{
if(array == NULL || start > end || k < start || k > end+1 || k <= 0 )
{
failed = true ;
return 0;
}
if(start == end)
{
return array[start] ;
}
int len = end - start + 1 ;
int tmp = 0 ;
int ps = rand()%len +start ;
int tk = k ;
while(true)
{
//分割两数组
int f = start ;
int t = array[ps] ;
int equalnum = 0 ;
for(int i = start ; i <= end ; i ++ )
{
if(array[i]< t )
{
tmp = array[f];
array[f] = array[i];
array[i] = tmp ;
f ++ ;
}else if(array[i] == t)
{
tmp = array[f];
array[f] = array[i];
array[i] = tmp ;
f ++ ;
equalnum ++ ;
}
} //end
f--;
if(equalnum > tk && (f - start + 1) == equalnum)
{
return t ;//这里是记录数据相等的数目,当我们从开始start处到最后处end都被这个值给充斥了,那么肯定是这里面的值了,再进行下去就会陷入死循环了。
}
if(tk == (f - start + 1) )
{
return t ;
}
if((f - start + 1 ) > tk )
{
end = f ;
}else
{
start = f + 1 ;
tk = k - start ; //这个地方犯过错误,就是写成了k=k-start,在调试的时候老发现无限的循环。后来打印k的值的时候发现k的值都***为负了。这个bug,这个过错使得在一次运行可能会得到正确的数据,但是多次运行后程序就崩溃。
}
len = end - start + 1 ;
ps = rand()%len +start ;
}
}
int main()
{
int array[10] = {1,1,1,2,2,1,4,1,1,1};
for(int i = 0 ; i < 10 ; i ++ )
{
cout<<findnumber(array,0,9,i+1)<<endl;
}
system("pause");
return 0 ;
}
先想好,分析好问题,自己脑中构思好了编写的思路,且想好了程序出错的地方再编程,这样会快的很多,而不是一看到问题就框框的在电脑上敲。
希望本文所述对大家C++程序设计有所帮助。
# C++
# 算法
# 无序数组
# 选择
# 第k小个数
# C++使用异或运算实现交换两个数的值
# C++如何判断一个数字是否为质数
# C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法
# C++统计中英文大小写字母、数字、空格及其他字符个数的方法
# C++求1到n中1出现的次数以及数的二进制表示中1的个数
# c++统计文件中字符个数代码汇总
# c++通过引用实现三个数字求最大值
# 利用C++的基本算法实现十个数排序
# 用C++实现求N!中末尾0的个数的方法详解
# 组中
# 想好
# 就会
# 好了
# 是有
# 给大家
# 当我们
# 脑中
# 这里面
# 所述
# 程序设计
# 而不是
# 整型
# 写成了
# 一个函数
# 讲述了
# lt
# iostream
# js
# include
相关文章:
详解jQuery中基本的动画方法
大学网站设计制作软件有哪些,如何将网站制作成自己app?
微信推文制作网站有哪些,怎么做微信推文,急?
如何制作算命网站,怎么注册算命网站?
内部网站制作流程,如何建立公司内部网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
教程网站设计制作软件,怎么创建自己的一个网站?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何快速启动建站代理加盟业务?
如何在阿里云部署织梦网站?
历史网站制作软件,华为如何找回被删除的网站?
如何配置WinSCP新建站点的密钥验证步骤?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
,巨量百应是干嘛的?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何挑选优质建站一级代理提升网站排名?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
如何通过老薛主机一键快速建站?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
招商网站制作流程,网站招商广告语?
音响网站制作视频教程,隆霸音响官方网站?
制作销售网站教学视频,销售网站有哪些?
,柠檬视频怎样兑换vip?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
网站制作说明怎么写,简述网页设计的流程并说明原因?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
平台云上自主建站:模板化设计与智能工具打造高效网站
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何实现建站之星域名转发设置?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
常州企业网站制作公司,全国继续教育网怎么登录?
建站主机是否等同于虚拟主机?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在香港免费服务器上快速搭建网站?
建站之星如何配置系统实现高效建站?
建站之星×万网:智能建站系统+自助建站平台一键生成
如何通过多用户协作模板快速搭建高效企业网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何挑选高效建站主机与优质域名?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何选择高效稳定的ISP建站解决方案?
建站VPS推荐:2025年高性能服务器配置指南
如何解决ASP生成WAP建站中文乱码问题?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何正确下载安装西数主机建站助手?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。