欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

sgyq yzo 大顶堆 小顶堆

时间:2024-05-19 10:56 作者:admin 点击:
输入n 输入n个数字 利用堆排序从大到小输出结果 堆排序:构成堆,堆顶堆尾交换位置排序 大顶堆:从小到大堆排序 小顶堆:从大到小堆排序 put(int x){ if(左子不存在) return ; int k=左;

输入n

输入n个数字

利用堆排序从大到小输出结果


堆排序:构成堆,堆顶堆尾交换位置排序

大顶堆:从小到大堆排序

小顶堆:从大到小堆排序

put(int x){

   if(左子不存在) return ;

   int k=左;

   if(右存在且右更***) k=右;

   if(需要交换){

       交换

       递归

   }

}


堆部分有序,大顶堆,上大下小,小顶堆,上小下大


put(int x){

   if(x*2>n) return ;

   int k=x*2;

   if(k+1<=n&&a[k+1]>a[k]) k++;

   if(a[x]<a[k]){

       swap(a[x],a[k]);

       put(k);

   }

}

put(int x){

   if(x*2>n) return ;

   int k=x*2;

   if(k+1<=n&&a[k+1]<a[k]) k++;

   if(a[x]>a[k]){

       swap(a[x],a[k]);

       put(k);

   }

}

(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%