码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构之堆排序

时间:2017-11-11 00:22:54      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:数据   blog   bre   const   file   int   printf   操作   class   

ppt(原创):

https://files.cnblogs.com/files/eastblue/堆排序.pptx

视频(原创):

https://www.bilibili.com/video/av16199074/

代码:

#include<cstdio>
#include<cstring>

const int maxn=1e9+7;
int b[50050];

void fun(int a[],int i)//a数组i节点完成操作 
{
    int l=sizeof(a),t;
    while(2*i+1<l)
    {
        t=a[i];
        if(2*i+2<l)//有两个孩子节点 
        {
            if(a[2*i+1]<=a[2*i+2]&&a[2*i+1]<a[i]) //与左孩子交换 
            {
                a[i]=a[2*i+1];
                a[2*i+1]=t;
                i=2*i+1;
            }
            else if(a[2*i+2]<a[2*i+1]&&a[2*i+2]<a[i])//与右孩子交换 
            {
                a[i]=a[2*i+2];
                a[2*i+2]=t;
                i=2*i+2;
            }
            else
                break;
        }
        else//只有一个孩子节点 
        {    
            if(a[2*i+1]<a[i])
            {
                a[i]=a[2*i+1];
                a[2*i+1]=t;
                i=2*i+1;
            } 
            else
                break;
        }            
    }
    
}

void heapsort(int a[])
{
    int l=sizeof(a);
    for(int i=(l-2)/2;i>=0;i--)//数组从0开始,所以从(l-2)/2开始’筛选‘,(对应ppt第二步) 
    {
        fun(a,i);        
    }

    for(int i=1;i<=l;i++)//(对应ppt第三步) 
    {
        b[i-1]=a[0];
        a[0]=a[l-i];
        a[l-i]=maxn;
        fun(a,0);
    }
    
    for(int i=0;i<l;i++) 
         a[i]=b[i];
 } 
 
 int main()
 {
     int array[8]={49,38,65,97,76,13,27,49};
     heapsort(array);
     for(int i=0;i<8;i++)
     printf("%d ",array[i]);
 }

 

数据结构之堆排序

标签:数据   blog   bre   const   file   int   printf   操作   class   

原文地址:http://www.cnblogs.com/eastblue/p/7816897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!