用堆排序的思想求最小的k個數,處理海量資料

2021-07-03 17:29:23 字數 624 閱讀 4059



//最小的k個數

//輸入n個整數,輸出其中最小的k個數

//解答:雖然利用快排的思想很好的解決了問題,但是也有限制,首先我們需要一次性讀入所以的資料,其次,需要修改輸入的陣列

//利用堆排序來解決此問題,此種方法適合處理海量資料

//首先我們先讀入k個元素建立乙個大小為k的大根堆,然後我們依次讀入剩下的資料,如果當前資料比大根堆的堆頂小,則用這個數代替當前

//堆頂,並調整堆使其保持大根堆的性質;如果當前資料比堆頂大,那麼這個數不可能是最小的k個整數之一,故可以拋棄此數,此種方法的複雜度為o(nlogk)

#includeusing namespace std;

void adjustdown(int *data,int i,int len)

void main()

; int len=sizeof(data)/sizeof(int);

int k;

cin>>k;

if(k>len||k<=0)

return;

int *b=new int[k];

for(int i=0;ib[0])

continue;

else

}for(int i=0;i

求最小的K個數

方法一 利用快排的思想,複雜度為o n class solution input low pivot return low vector getleastnumbers solution vector input,int k else vector res input.begin input.beg...

求最小的第K個數

演算法分析 除了排序。大小堆,還可以用排序的演算法。我們每次以乙個基準元素進行快速排序,排序完之後,看這個基準元素的位置是否為k位置,如果大於k,那麼說明第k 小的元素在基準元素的左邊。然後從右邊選取基準元素進行快排。如果小於k,演算法相反 include include include inclu...

九度OJ 1371 最小的K個數 堆排序

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入 每個測試案例包括2行 第一行為2個整數n,k 1 n,k 200000 表示陣列的長度。第二行包含n個整數,表示這n個數,陣列中的數的範圍是 0,1000 000 ...