前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >求最小的k个数[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-07-08 19:24:50
2700
发布2022-07-08 19:24:50
举报
文章被收录于专栏:全栈程序员必看

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

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

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

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

代码:

代码语言:javascript
复制
#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个数[通俗易懂]
求最小的k个数[通俗易懂]

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档