全网整合营销服务商

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

免费咨询热线: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 


相关文章: 如何在橙子建站中快速调整背景颜色?  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小时内与您取得联系。