• 数据结构之堆排序


    ppt(原创):

    https://files.cnblogs.com/files/eastblue/%E5%A0%86%E6%8E%92%E5%BA%8F.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]);
     }
  • 相关阅读:
    剑指offer系列40:构建乘积数组
    自学网站
    存储分析--- 转载
    程序员面试宝典第四版
    资源查找
    诗句
    fifo manage
    charlse抓包
    python基础之-----列表list工厂的仓库
    python内置函数积累
  • 原文地址:https://www.cnblogs.com/eastblue/p/7816897.html
Copyright © 2020-2023  润新知