排序算法5--堆排序

原创 2007年10月11日 01:25:00
 堆排序在最差情况下相比快速排序,具有更好的时间复杂度。
template <class T>
void adjust_heap(vector<T> &Vct, int First, int Last)
...{
    
int CurrentPos = First;
    
int ChildPos = 2 * CurrentPos + 1;
    T Temp 
= Vct[First];

    
while (ChildPos <= Last-1)
    
...{
        
if (ChildPos+1 <= Last-1 && Vct[ChildPos] < Vct[ChildPos+1])
            ChildPos 
+= 1;

        
if (Temp < Vct[ChildPos])
        
...{
            Vct[CurrentPos] 
= Vct[ChildPos];
            CurrentPos 
= ChildPos;
            ChildPos 
= 2 * CurrentPos + 1;
        }

        
else
            
break;
    }


    Vct[CurrentPos] 
= Temp;
}


template 
<class T>
void make_heap(vector<T> &Vct)
...{
    
int LastPos = Vct.size();
    
int HeapPos = (LastPos - 2/ 2;

    
while (HeapPos >= 0)
    
...{
        adjust_heap(Vct, HeapPos, LastPos);
        HeapPos
--;
    }

}


template 
<class T>
void heap_sort(vector<T> &Vct)
...{
    make_heap(Vct);
    
int n = Vct.size();

    
for (int i = n; i > 1; i--)
        pop_heap(Vct, i);
}

排序算法(七)——堆排序

基本思想 堆排序是一种树形选择排序,是对直接选择排序的改进。   首先,我们来看看什么是堆(heap): (1)堆中某个节点的值总是不大于或不小于其父节点的值; (2)堆总是一棵完全二叉树(Compl...
  • u012152619
  • u012152619
  • 2015年08月13日 08:39
  • 13816

ios oc实现排序算法

oc实现的快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序 /*******************************快速排序 start******...
  • u012367335
  • u012367335
  • 2016年06月29日 10:53
  • 662

堆排序以及归并排序的理解

一、堆排序        堆排序的核心是把数组看作一个完全二叉树,通过入堆操作把整个二叉树整理一遍,使所有的父节点都比其子节点大,如此根节点a(即数组的第一位)就是最大的数。把根节点a与二叉树最后一位...
  • prim_learn
  • prim_learn
  • 2016年12月02日 16:44
  • 257

排序算法-堆排序

堆排序算法是建立在堆这种数据结构的基础上,其实堆听着很高端,其实很简单,就是一个二叉树,但是又特殊条件,就是其父节点比孩子节点都大(或都小)的堆称为最大堆(最小堆),瞬间感觉很简单了,最简单的保存方法...
  • y990041769
  • y990041769
  • 2015年06月22日 21:29
  • 1577

堆排序算法原理及实现

堆排序是排序中一种比较重要的算法,和快速排序一样,其复杂度也是O(nlogn);同时也是一种原地排序算法:在任何时候,数组中只有常数个元素存储在输入数组以外。堆这种数据结构是处理海量数据比较常见的结构...
  • sunjunior
  • sunjunior
  • 2015年06月09日 22:20
  • 2076

三种排序算法(归并排序、快速排序,堆排序)

归并排序 快速排序 堆排序 java实现
  • stephenxe
  • stephenxe
  • 2016年07月18日 18:40
  • 2143

排序算法七:选择排序之堆排序

排序算法七:选择排序之堆排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本...
  • LG1259156776
  • LG1259156776
  • 2015年09月26日 11:37
  • 2676

【数据结构与算法】内部排序之三:堆排序(含完整源码)

堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用...
  • mmc_maodun
  • mmc_maodun
  • 2014年03月04日 00:01
  • 22872

八大排序算法-堆排序

基本思想 堆排序是一种树形选择排序,是对直接选择排序的有效改进。 堆的定义如下:具有n个元素的序列(k1,k2,…,kn),当且仅当满足 时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元...
  • qishouzhang
  • qishouzhang
  • 2015年07月26日 15:29
  • 1326

排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)

以下是对《算法导论(第二版)》
  • XD_lixin
  • XD_lixin
  • 2014年04月28日 21:47
  • 1053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法5--堆排序
举报原因:
原因补充:

(最多只允许输入30个字)