求最小的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#异步调用的方法

    最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用异步调用的好处,随便将自己找

    2021年12月24日
    37
  • C语言字符串分割

    C语言字符串分割在C语言中,内置的函数库中除了可以用strtok()来对字符串进行分割之外,还可以用sscannf()对字符串进行分割。sscanf()包含的头文件stdio.h原型intsscanf(constchar*str,constchar*format,…)实例:#include&lt;stdio.h&gt;intmain(){ charbuf[]="…

    2022年4月30日
    52
  • 百度谷歌搜索引擎常用搜索技巧有哪些_可以用谷歌搜索的软件

    百度谷歌搜索引擎常用搜索技巧有哪些_可以用谷歌搜索的软件整理了一份史上最全搜索引擎检索技巧!

    2022年9月25日
    0
  • presentation里的reference_preference的用法

    presentation里的reference_preference的用法Perference也就是我们常说的偏好设置,首选项设置,能够自己主动保存一些数据,比如我们在上一次使用的时候的一些内容,则在下一次启动后依旧生效,而不须要再进行配置。当用户改变设置时,系统就会更新SharedPreference文件里相应的值。perference使用键值对的方式来处理,在android3.0之前,我们一般去继承Preference这个基类,去给用户呈现一个…

    2022年9月7日
    0
  • ubuntu安装deb文件_ubuntu安装完deb后找不到

    ubuntu安装deb文件_ubuntu安装完deb后找不到下载deb包到找到下载目录sudodpkg-iXXX.deb如果提示没有依赖sudoapt-getinstall-f如果提示依赖下载源没有找到(404),请到systemsettings—software&updates—-ubuntusoftware的sourcecode勾选并设置downloadfromchina某源网站,再运行sudoapt-getinsta

    2022年8月30日
    0
  • c中getline的用法_enum用法

    c中getline的用法_enum用法getline()用法getline是C++标准库函数;它有两种形式,一种是头文件<istream>中输入流成员函数;一种在头文件<string>中普通函数;它遇到以下情况发生会导致生成的本字符串结束:(1)到文件结束,(2)遇到函数的定界符,(3)输入达到最大限度。输入流成员函数getline()函数语法结构:在<istream>中的g…

    2022年10月26日
    0

发表回复

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

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