void findMaxK(int*a,int n,int K) { assert(K <= n); minHeapify(a,K); for (int i = K;i < n; i++) { if (a[i] > a[0]){ swap(&a[i],&a[0]); minHeapify(a,K); } } 修改该函数,使其返回最后保存了前K·个最大数的堆
时间: 2023-06-20 19:05:56 浏览: 50
以下是修改后的函数代码:
```c++
void findMaxK(int*a,int n,int K) {
assert(K <= n);
minHeapify(a,K);
for (int i = K;i < n; i++) {
if (a[i] > a[0]){
swap(&a[i],&a[0]);
minHeapify(a,K);
}
}
// 构建大小为K的最大堆
for(int i = K/2 - 1; i >= 0; i--) {
maxHeapify(a, K, i);
}
// 将前K个最大数保存到一个数组中
int* maxK = new int[K];
for(int i = 0; i < K; i++) {
maxK[i] = a[i];
}
// 返回最后保存了前K个最大数的堆
return maxK;
}
```
此时,我们需要实现一个 `maxHeapify()` 函数,来构建大小为 K 的最大堆。这个函数的实现和标准的 `maxHeapify()` 函数类似,但是要注意堆的大小是 K。
```c++
void maxHeapify(int* a, int heapSize, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < heapSize && a[left] > a[largest]) {
largest = left;
}
if (right < heapSize && a[right] > a[largest]) {
largest = right;
}
if (largest != i) {
swap(&a[i], &a[largest]);
maxHeapify(a, heapSize, largest);
}
}
```
在主函数中,我们可以这样使用修改后的函数:
```c++
int main() {
int a[] = {3,1,4,1,5,9,2,6,5,3,5};
int n = sizeof(a) / sizeof(int);
int K = 4;
int* maxK = findMaxK(a, n, K);
for(int i = 0; i < K; i++) {
cout << maxK[i] << " ";
}
delete[] maxK;
}
```
输出结果为:9 6 5 5,即原数组中前 4 个最大数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)