堆排序

来源:互联网 发布:天分玻璃优化软件下载 编辑:程序博客网 时间:2024/06/08 20:02

敲着练习一下

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn =100;int a[maxn],n,length;void max_heapify(int a[],int i){   int l=i*2,r=i*2+1,largest;   if(l<=length&&a[l]>a[i])        largest=l;   else        largest=i;   if(r<=length&&a[r]>a[largest])        largest=r;   if(largest!=i)   {       swap(a[i],a[largest]);       max_heapify(a,largest);   }   return;}void build_max_heap(int a[])//构建二叉堆{    int i;    for(i=n/2;i>=1;i--)//递归每个不是叶子节点的节点,对其调用max_heapify函数,使其满足最大堆性质    {        max_heapify(a,i);    }    return;}void heap_sort(int a[])//利用二叉堆排序{    int i;    for(i=n;i>=2;i--)    {        swap(a[i],a[1]);//每次都把根移到最后面,即最大的(根)放在后面,递增        length--;        max_heapify(a,1);    }    return;}int main(){    printf("输入个数:\n");    scanf("%d",&n);    length=n;    printf("依次输入n个数:\n");    for(int i=1;i<=n;i++)        scanf("%d",&a[i]);    build_max_heap(a);    printf("二叉堆为:\n");    for(int i=1;i<=n;i++)        printf("%d ",a[i]);    printf("\n");    heap_sort(a);    printf("排序后为:\n");    for(int i=1;i<=n;i++)        printf("%d ",a[i]);    printf("\n");    return 0;}


 

0 0
原创粉丝点击