本文实例讲述了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
相关文章:
建站主机CVM配置优化、SEO策略与性能提升指南
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何在IIS7上新建站点并设置安全权限?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何在建站之星绑定自定义域名?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何生成腾讯云建站专用兑换码?
宝塔面板创建网站无法访问?如何快速排查修复?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
h5在线制作网站电脑版下载,h5网页制作软件?
建站之星3.0如何解决常见操作问题?
实现虚拟支付需哪些建站技术支撑?
如何快速搭建高效可靠的建站解决方案?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站与域名管理如何高效结合?
如何通过VPS建站实现广告与增值服务盈利?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
如何用虚拟主机快速搭建网站?详细步骤解析
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
建站之星北京办公室:智能建站系统与小程序生成方案解析
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
b2c电商网站制作流程,b2c水平综合的电商平台?
个人网站制作流程图片大全,个人网站如何注销?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何快速搭建高效简练网站?
如何高效利用200m空间完成建站?
如何打造高效商业网站?建站目的决定转化率
公司网站设计制作厂家,怎么创建自己的一个网站?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何快速搭建支持数据库操作的智能建站平台?
如何自定义建站之星网站的导航菜单样式?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
高防服务器租用如何选择配置与防御等级?
微信小程序 五星评分(包括半颗星评分)实例代码
如何通过商城自助建站源码实现零基础高效建站?
公司网站的制作公司,企业网站制作基本流程有哪些?
如何通过老薛主机一键快速建站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何用y主机助手快速搭建网站?
c# 在ASP.NET Core中管理和取消后台任务
制作门户网站的参考文献在哪,小说网站怎么建立?
*请认真填写需求信息,我们会在24小时内与您取得联系。