全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++算法之在无序数组中选择第k小个数的实现方法

本文实例讲述了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小时内与您取得联系。