標籤:求最小的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;}
運行結果: