堆的操作 : 建立堆 ,删除元素,插人元素;

xiaoxiao2021-02-28  19

#include <iostream> #include <cstdio> using namespace std; int heap[11]={0,85, 55 , 82 , 57 , 68, 92, 99 ,98 , 66 ,56} ;   //level  void downAdjust(int low, int high){  //把每个根结点 和  父结点 进行比较,大的就换上去。  int i=low,j=i*2;               while(j <= high){      //如果左孩子存在;  if(heap[j] < heap[j+1] && j+1 <= high)  j=j+1;     if(heap[i] < heap[j]){ swap(heap[i],heap[j]); i=j; j=i*2; }else{ break; } } void upAdjust(int low ,int high){ int i=high,j = i/2; while(j >= low){ if(heap[j] < heap[i]){ swap(heap[j],heap[i]); i=j; j=i/2; }else{ break; } } } int main(int argc, char** argv) { //create the heap; int n=10; for(int i=n/2; i >= 1; i--){ downAdjust(i,n); } /* 删除 */ heap[1]=heap[n]; n--; downAdjust(1,n); /*  end  */ /* 添加   */ heap[++n]=   99; upAdjust(1,n); /*  output                         */ for(int i=1;i<=10;i++){ printf("%d ",heap[i]);  return 0; }
转载请注明原文地址: https://www.6miu.com/read-1700348.html

最新回复(0)