用堆排序寻找数组中最大的K个数 (三)

2014-11-24 02:51:55 · 作者: · 浏览: 6
); //i 是元素个数 每交换依次元素就少一个
}
}

void TopK(int arr[],int n,int K)
{
if(n {
cout<<"error"< return;
}
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 cout< delete []heap;
}

int main()
{
int a[30] = {0};
Random(a,30);
print(a,30);
cout< TopK(a,30,5);
cout< HeapSort(a,30);
cout< print(a,30);
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.

*******************/