3.建堆算法讨论 前面一直说向上调整算法用来建堆,向下调整算法用来删除,其实有点过于局限,Topk问题和堆排序我也采用向下调整算法来进行建堆是有原因的。 首先先基于一个给定的数组来讨论如何采用两种算法来进行建堆 向上调整 之前在堆排序使用过,以数组的第一个数看成一个堆,将数组剩下的数一次插入并进行调整 代...
sift(topk, i, k -1)# 把原数组剩余元素和堆顶最小元素比较, 把大的数替换堆顶元素foriinrange(k, n):ifli[i] > topk[0]: topk[0] = li[i] sift(topk,0, k -1)# 对topk数组排序foriinrange(k -1, -1, -1): topk[i], topk[0] = topk[0], topk[i] sift(topk,0, i -1)re...
堆排序+TopK问题——“数据结构与算法” 堆排序——(1) heap.h的内容: #pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdbool.h>typedef int HeapDataType;typedef struct Heap{HeapDataType* a;int size;int capacity;}Heap;//堆的初始化void HeapInit(Heap* php);//堆的...