求最小的k個數

來源:互聯網
上載者:User

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

運行結果:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.