求最小的k个数[通俗易懂]

求最小的k个数

大家好,又见面了,我是全栈君。

和高速排序有点类似,利用高速排序的划分算法,

划分算法见http://blog.csdn.net/buyingfei8888/article/details/8997803

依据int partition(int number[],int start,int end);返回值为数组下标,大小为index,index左边值均小于number【index】,右边均大于number【index】,若为k-1.则左边值均为所求。

代码:

#include <iostream>

using namespace std;

int partition(int number[],int start,int end){
	int temp=number[start];
	while(start<end){
		while(start<end && number[end]>temp)
			--end;
		if(start < end)
		    number[start++] = number[end];
		while(start<end && number[start]<temp)
			start++;
		if(start<end)
		     number[end--] = number[start];

		number[start]=temp;
	}

	return end;
}

void getLeastNumber(int * input,int start,int end,int * output,int k){
	if(NULL == input || NULL == output || k <=0 || start <0 || end < 1)
		return ;
	int index=partition(input,start,end);
	while(index != k-1){
		if(index > k-1){
			end = index -1;
			index =  partition(input,start,end);
		}
		if(index < k-1){
			start = index + 1;
			index = partition(input , start , end );
		}
	}
	for(int i=0;i<k;i++){
		output[i] = input[i];
		cout<< input[i]<<" ";
	}
	
}


int main(){
	int input[8]={2,1,4,3,99,100,56,909};
	int *output;
	getLeastNumber(input,0,7,output,7);
	return 0;

}

执行结果:

求最小的k个数[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115979.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图书管理系统C语言_c语言图书信息管理系统

    图书管理系统C语言_c语言图书信息管理系统【主要内容】开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询按照价钱排序按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简…

    2022年10月11日
    0
  • onmouseover 和onmousemove的区别「建议收藏」

    onmouseover 和onmousemove的区别「建议收藏」时间上 onmousemove事件触发后,再触发onmouseover事件。按钮上 不区分鼠标按钮。动作上 onmouseover只在刚进入区域时触发。onmousemove除了刚进入区域触发外,在区域内移动鼠标,也会触发该事件。当鼠标移动很快时,可能不会触发这两个事件。 onmouseover与onmousemove的区别是:当鼠标移过当…

    2022年8月30日
    0
  • sql查询数据库中所有表名_使用权和所有权的区别

    sql查询数据库中所有表名_使用权和所有权的区别MySQL中查询所有数据库名和表名;SQLServer中查询所有数据库名和表名;Oracle中查询所有数据库名和表名;

    2022年9月26日
    0
  • 《黑手党2》全部50本花花公子杂志收集攻略

    《黑手党2》全部50本花花公子杂志收集攻略寻找全部50本花花公子杂志……..看下面的提示找吧(写到手抽+脑抽)==||每章过去了就拿不到了第2章:2本No1.JOE的公寓-在咖啡桌上No3.MIKE的车房-M

    2022年7月4日
    44
  • WIin10——QTP10.0运行mgn-mqt82未能生成lservrc文件

    WIin10——QTP10.0运行mgn-mqt82未能生成lservrc文件今天在Win10系统安装了QTP10.0,安装步骤都是按照激活成功教程教程执行的:1.安装qtp,一路默认下来,到要求输入License的界面2.拷贝mgn-mqt82.exe(下载)到C:\ProgramFiles\MercuryInteractive(自己手动创建)文件夹下3.自己手动创建C:\ProgramFiles\CommonFiles\MercuryInteractive…

    2022年9月1日
    1
  • 【16】进大厂必须掌握的面试题-100个python面试

    【16】进大厂必须掌握的面试题-100个python面试

    2020年10月29日
    469

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号