}
}
void TopK(int arr[],int n,int K)
{
if(n
cout<<"error"<
}
int *heap=new int[K];
//随机将前K个数装入数组构建小顶堆
for(int i=0;i
heap[i]=arr[i];
}
Build_Min_Heap(heap,K);//建立最小堆
//从生下的数中找比小顶堆堆顶大的数并与堆顶交换(直接放在堆顶位置不交换效率更高)
for(int i=K;i
if(arr[i]>heap[0])
{
heap[0]=arr[i];
//破坏了最小对的性质 对最小对进行调整
Min_Heapify(heap,0,K);
}
}
for(int i=0;i
}
int main()
{
int a[30] = {0};
Random(a,30);
print(a,30);
cout<
cout<
cout<
return 0;
}
/******************
21 0 7 26 10 11 23 10 4
1 23 3 10 25 31 31 17 28
11 31 27 23 19 7 19 21 20
6 18 14
------------------------------------
27 28 31 31 31
------------------------------------
-----------------------------------
31 31 31 28 27 26 25 23 23
23 21 21 20 19 19 18 17 14
11 11 10 10 10 7 7 6 4
3 1 0
Process returned 0 (0x0) execution time : 0.030 s
Press any key to continue.
*******************/