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

sgyq wzh yzo 堆排序

时间:2024-05-12 12:13 作者:admin 点击:
#include iostream using namespace std; //大顶堆-排序 int sz[1000]={0,60,30,15,27,45,32,16,90,40,20,10,12}; //90 60 32 40 45 15 16 27 30 20 10 12 大顶 int n=12; void put(int x){ int k=x*2; if(k+1=nsz[k+1]sz[k]) k++; if(sz[x]sz[k]){ sw

#include <iostream>

using namespace std;

//大顶堆->排序

int sz[1000]={0,60,30,15,27,45,32,16,90,40,20,10,12};

//90 60 32 40 45 15 16 27 30 20 10 12 大顶

int n=12;

void put(int x){

   int k=x*2;

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

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

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

       if(k*2<=n) put(k);

   }

}

int main(){

   for(int i=n/2;i>=1;i--){

       put(i);

   }

   for(int i=1;i<=n;i++) cout<<sz[i]<<" ";cout<<endl;

   //排序

   int i=1,j=n;

   while(i!=n){

       swap(sz[i],sz[n--]);

       if(i!=n) put(i);

   }

   for(int i=1;i<=j;i++) cout<<sz[i]<<" ";

   /*重复

       将堆顶与堆尾交换位置,重新排列堆顶

   直到 堆内只剩一个*/


   数据大致有序,且频繁增删数据时需要排序,堆排序最合适


   return 0;

}

作业:堆及堆排序的代码要熟练掌握

完成:1369合并果子

杨子欧:尝试完成指针造堆以及堆排序

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