STL堆排序其實(shí)就是創(chuàng)建一個(gè)二叉樹(shù),下面是幾個(gè)常用函數(shù)的使用方法和代表的意思
#include
#include
#include
#include
using namespace std;

(1)創(chuàng)建一個(gè)數(shù)組,并添加數(shù)據(jù)
    vector v_Arry;
    v_Arry.push_back(5);
    v_Arry.push_back(6);
    v_Arry.push_back(4);
    v_Arry.push_back(8);
    v_Arry.push_back(2);
    v_Arry.push_back(3);
    v_Arry.push_back(7);
    v_Arry.push_back(1);
    v_Arry.push_back(9);
    v_Arry.push_back(10);
    v_Arry.push_back(55);

(2)make_heap(v_Arry.begin(), v_Arry.end(), less()) //建堆(其實(shí)就是建二叉樹(shù)),根節(jié)點(diǎn)是最大值,其每一個(gè)節(jié)點(diǎn)都小于或等于其父節(jié)點(diǎn);使用greater()則相反,根節(jié)點(diǎn)是最小值,其每一個(gè)節(jié)點(diǎn)都大于或等于其父節(jié)點(diǎn)

(3)此時(shí)可以輸出查看一下建好的堆是不是一個(gè)標(biāo)準(zhǔn)的二叉樹(shù)
我的輸出結(jié)果是:55,10,7,9,6,3,4,1,8,5,2
變成二叉樹(shù)就是如下:
<!--[if !vml]--><!--[endif]--> <!--[if !vml]--><!--[endif]-->

 

結(jié)果不是唯一單一定要滿足父節(jié)點(diǎn)和子節(jié)點(diǎn)的大小關(guān)系。
(4)pop_heap(v_Arry.begin(), v_Arry.end());//把根節(jié)點(diǎn)移到末尾,并沒(méi)有刪除
     v_Arry.pop_back();//刪除該節(jié)點(diǎn)
    此時(shí)輸出結(jié)果:10,9,7,8,6,3,4,1,2,5
二叉樹(shù)如下:

 

(5)v_Arry.push_back(55); //只是添加數(shù)據(jù)放到子節(jié)點(diǎn)
    push_heap(v_Arry.begin(), v_Arry.end());//往二叉樹(shù)中插入數(shù)據(jù),滿足子節(jié)點(diǎn)小于等于父節(jié)點(diǎn)
此時(shí)輸出結(jié)果:55,10,7,8,9,3,4,1,2,5,6
二叉樹(shù)如下:

 

(6)sort_heap(v_Arry.begin(), v_Arry.end());//對(duì)二叉樹(shù)所有節(jié)點(diǎn)進(jìn)行排序
此時(shí)輸出結(jié)果:1,2,3,4,5,6,7,8,9,10,55

(7)find ( v_Arry.begin(), v_Arry.end(), value );// 從begin到end查找value,若找不到,返回end

原文地址:http://blog.zol.com.cn/1356/article_1355249.html