//最小的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 ...