论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
C算法—堆排序

[科技论文网] http://www.scipapers.com    2007-12-01  

    C算法—堆排序

    作者:胡欣

    堆排序(Heap Sort)只需要一个记录大小的辅助空间
    堆排序在最坏的情况下,其时间复杂度为O(nlog n),相对于快速排序来说,这是堆的最大优点。
    堆是一棵完全二叉树,且树中不存在大于(小于)父节点的节点。
    堆中的第i个元素大于或等于第2i个元素和第2i+1个元素。


    自底向上的堆化
    fixUp(Item* a, int k)
    {
        
    while(k>1 && less(a[k/2], a[k]))
        
    {
        exch(a[k], a[k
    /2]);
        k 
    = k / 2;        //向上找到父结点
        }

    }

    自顶向下的堆化
    fixDown(Item* a, int k, int N)
    {
        
    int j;
        
    while(2*<= N)
        
    {
        j 
    = 2 * k;
        
    if(j<&& less(a[j], a[j+1]))    j++;    //选择两个孩子中较大者,与a[k]比较
        if(!less(a[k], a[j]))    break;        //局部满足堆条件,立即退出
        exch(a[k], a[j]);            //否则,交换
        k = j;
        }

    }

    堆排序
    void heapsort(Item* a, int l, int r)
    {
        
    int k, N = r-l+1;        //N为待排元素的个数
        for(k = N/2; k >= 1; k--)                         //建堆,从第一个非叶子节点开始
        fixDown(a, k, N);    //自顶向下的堆化
        while(N > 1)
        
    {
        exch(a[l], a[l
    +N-1]);    //把第一个元素(最大)和最后一个元素交换
        fixDown(a, 1--N);    //再自顶向下堆化
        }

    }
        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
C算法—堆排序
下面没有链接了     人机博弈程序实现
最新论文
·[程序设计]C算法—堆排序
·[程序设计]人机博弈程序实现
·[程序设计]A*算法Python实现
·[程序设计]森德拉姆素数筛法
·[程序设计]一种快速图形拉伸算法
·[程序设计]扫描线种子填充算法
·[程序设计]C语言实现集合的交,并,差
·[程序设计]采用链式存储结构构造哈夫曼树
·[程序设计]链表反转的两种实现方法
·[程序设计]数据结构(C语言):迷宫问题
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com