全网整合营销服务商

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

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


相关文章: 详解jQuery中基本的动画方法  大学网站设计制作软件有哪些,如何将网站制作成自己app?  微信推文制作网站有哪些,怎么做微信推文,急?  如何制作算命网站,怎么注册算命网站?  内部网站制作流程,如何建立公司内部网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  教程网站设计制作软件,怎么创建自己的一个网站?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何快速启动建站代理加盟业务?  如何在阿里云部署织梦网站?  历史网站制作软件,华为如何找回被删除的网站?  如何配置WinSCP新建站点的密钥验证步骤?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  ,巨量百应是干嘛的?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  如何挑选优质建站一级代理提升网站排名?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何通过老薛主机一键快速建站?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  招商网站制作流程,网站招商广告语?  音响网站制作视频教程,隆霸音响官方网站?  制作销售网站教学视频,销售网站有哪些?  ,柠檬视频怎样兑换vip?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  网站制作说明怎么写,简述网页设计的流程并说明原因?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  平台云上自主建站:模板化设计与智能工具打造高效网站  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何实现建站之星域名转发设置?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  常州企业网站制作公司,全国继续教育网怎么登录?  建站主机是否等同于虚拟主机?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何在香港免费服务器上快速搭建网站?  建站之星如何配置系统实现高效建站?  建站之星×万网:智能建站系统+自助建站平台一键生成  如何通过多用户协作模板快速搭建高效企业网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何挑选高效建站主机与优质域名?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何选择高效稳定的ISP建站解决方案?  建站VPS推荐:2025年高性能服务器配置指南  如何解决ASP生成WAP建站中文乱码问题?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站之星免费模板:自助建站系统与智能响应式一键生成  如何正确下载安装西数主机建站助手?  成都响应式网站开发,dw怎么把手机适应页面变成网页? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。