堆排序

作者: __小二杰 | 来源:发表于2016-03-14 21:30 被阅读44次
#define LeftChild(i) (2*(i)+1) //由于数组是从0开始的,因此儿子节点的索引要多加一个

 

void PercDown(int A[], int i, int N) //下滤,将堆顶的元素下滤到适当位置

{

   int Child;

   int Temp;

   for(Temp = A[i]; LeftChild(i) < N; i = Child)

   {

     Child = LeftChild(i);

     if(Child != N-1 && A[Child+1] > A[Child]) //选取儿子中值较大的一个

     {

       Child++;

     }

     if(Temp < A[Child]) //如果temp的值小,则将child上滤

     {

       A[i] = A[Child];

     }

     else //如果temp的值大于孩子的值,则退出for循环,temp就安放在此

       break;

   }

 A[i] = Temp;

}

 

void HeapSort(int A[], int N)

{

   int i;

   for(int i = N/2; i >= 0; --i) //对一个普通数组建立堆序性,堆顶的值最大

   {

     PercDown(A, i, N);

   }

   for(i = N-1; i>=0; --i) //将堆顶元素放到最后,最后一个元素放到堆顶,对除最后的那个元素外的//堆建立堆序性,这样就相当于删除了最大的元素,放到最后,知道删除所有元素则排序完成。

   {

     int temp;

     temp = A[0];

     A[0] = A[i];

     A[i] = temp;

     PercDown(A, 0, i);

   }

}

相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

      本文链接:https://www.haomeiwen.com/subject/rkwflttx.html