1.原理:
1.1將資料存在陣列中,利用堆排排序陣列的前k個數(遞增),此時建立的是小堆,陣列的第乙個元素儲存堆中最小值。
1.2從(k+1)個陣列元素遍歷到最後,每次都和堆頂元素對比,如果大於堆頂元素,交換兩者,調整堆。
1.3輸出陣列前k個數,就是最大的k個數。
#include
#define k 3
void swap(int *a,int *b)
void shift(int arr,int n,int i)
arr[i]=temp;
}void createk(int arr,int n)}}
int main()
;createk(arr,6);
for(i=0;i
利用堆求最大或最小的前k個數
用堆在海量資料中找出最大或最小的k個數,效率非常高。1 在一組資料中找出最小的k個數 解題思路 要找出最小的k個數,我們可以先用這組資料中的k個數構建一棵 最大堆 然後再將剩下的元素與堆頂元素相比。如果大於堆頂元素,則不做處理,繼續向下比較。如果小於堆頂元素,則將堆頂元素與這個元素交換,然後再恢復堆...
使用快速排序,求最大的k個數
使用選擇排序的思想 時間複雜度o n k includeusing namespace std void selectmax int arr,int n,int k void selectsort int arr,int n void swap int a,int b int main void s...
查詢最大的K個數 查詢最小的K個數
使用乙個容器,大小為k 用這個容器來儲存這最大的或者最小的k個數。如果是找最大的k個數,那麼,每次和容器中的最小元素比較,如果最小的元素小於當前元素,那麼刪除這個最小的元素,同時將當前元素插入 如果是找最小的k個數,那麼就和容器中最大的元素比較。同理。容器用哪個呢?容器選擇用set,set本身就是排...