本文实例讲述了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
相关文章:
如何在橙子建站中快速调整背景颜色?
XML的“混合内容”是什么 怎么用DTD或XSD定义
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
C++如何使用std::optional?(处理可选值)
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何基于云服务器快速搭建网站及云盘系统?
存储型VPS适合搭建中小型网站吗?
如何在阿里云域名上完成建站全流程?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何通过万网虚拟主机快速搭建网站?
如何高效生成建站之星成品网站源码?
如何在VPS电脑上快速搭建网站?
电商平台网站制作流程,电商网站如何制作?
盐城做公司网站,江苏电子版退休证办理流程?
代刷网站制作软件,别人代刷火车票靠谱吗?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在Windows 2008云服务器安全搭建网站?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
如何通过虚拟机搭建网站?详细步骤解析
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
济南网站建设制作公司,室内设计网站一般都有哪些功能?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
音响网站制作视频教程,隆霸音响官方网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
Python文件管理规范_工程实践说明【指导】
建站之星3.0如何解决常见操作问题?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
建站之星代理费用多少?最新价格详情介绍
建站之星与建站宝盒如何选择最佳方案?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
微信小程序 五星评分(包括半颗星评分)实例代码
如何通过FTP服务器快速搭建网站?
css网站制作参考文献有哪些,易聊怎么注册?
购物网站制作公司有哪些,哪个购物网站比较好?
建站VPS能否同时实现高效与安全翻墙?
建站之星代理平台如何选择最佳方案?
如何在自有机房高效搭建专业网站?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
建站之星导航如何优化提升用户体验?
如何用好域名打造高点击率的自主建站?
如何选择最佳自助建站系统?快速指南解析优劣
详解jQuery停止动画——stop()方法的使用
如何基于云服务器快速搭建个人网站?
安云自助建站系统如何快速提升SEO排名?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
*请认真填写需求信息,我们会在24小时内与您取得联系。