利用K 堆求最大的K個數

2021-09-30 11:31:10 字數 384 閱讀 9688

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本身就是排...