下面再介紹stl中與堆相關的4個函式——建立堆make_heap(),在堆中新增資料push_heap(),在堆中刪除資料pop_heap()和堆排序sort_heap():
標頭檔案 #include
下面的_first與_last為可以隨機訪問的迭代器(指標),_comp為比較函式(仿函式),其規則——如果函式的第乙個引數小於第二個引數應返回true,否則返回false。
建立堆
make_heap(_first, _last, _comp)
預設是建立最大堆的。對int型別,可以在第三個引數傳入greater()得到最小堆。
在堆中新增資料
push_heap (_first, _last)
要先在容器中加入資料,再呼叫push_heap ()
在堆中刪除資料
pop_heap(_first, _last)
要先呼叫pop_heap()再在容器中刪除資料
堆排序
sort_heap(_first, _last)
排序之後就不再是乙個合法的heap了
有關堆與堆排序的更詳細介紹請參閱——《
白話經典演算法系列之七 堆與堆排序》
下面給出stl中heap相關函式的使用範例:
[cpp]view plain
copy
//by morewindows( )
#include
#include
#include
#include
using
namespace
std;
void
printfvectorint(vector<
int> &vet)
intmain()
掌握其基本用法後,我們用這個堆排序和
《白話經典演算法系列》
中的堆排序
、快速排序
,歸併排序
來進行個效能測試(win7 + vs2008 release下),測試**如下:
[cpp]view plain
copy
// by morewindows( )
#include
#include
#include
using
namespace
std;
//------------------------快速排序----------------------------
void
quick_sort(
ints,
intl,
intr)
s[i] = x;
quick_sort(s, l, i - 1); // 遞迴呼叫
quick_sort(s, i + 1, r);
} }
//------------------------歸併排序----------------------------
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void
mergearray(
inta,
intfirst,
intmid,
intlast,
inttemp)
while
(i <= m)
temp[k++] = a[i++];
while
(j <= n)
temp[k++] = a[j++];
for(i = 0; i
a[first + i] = temp[i];
} void
mergesort(
inta,
intfirst,
intlast,
inttemp)
} bool
mergesort(
inta,
intn)
//------------------------堆排序---------------------------
inline
void
swap(
int&a,
int&b)
//建立最小堆
// 從i節點開始調整,n為節點總數 從0開始計算 i節點的子節點為 2*i+1, 2*i+2
void
minheapfixdown(
inta,
inti,
intn)
a[i] = temp;
} //建立最小堆
void
makeminheap(
inta,
intn)
void
minheapsorttodescendarray(
inta,
intn)
} const
intmaxn = 5000000;
inta[maxn];
intb[maxn], c[maxn], d[maxn];
intmain()
對100000(十萬)個資料的測試結果:
對500000(五十萬)個資料的測試結果:
對1000000(一百萬)個資料的測試結果:
對5000000(五百萬)個資料的測試結果:
從中可以看出快速排序的效率確實要比其它同為o(n * logn)的排序演算法要高,而stl中堆操作函式的效能與《
白話經典演算法系列之七 堆與堆排序
》一文中堆操作函式的效能是相差無幾的。
STL系列之四 heap 堆
下面再介紹stl中與堆相關的4個函式 建立堆,新增資料,刪除資料,堆排序 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數小於第二個引數應返回true,否則返回false。建立堆 make heap fir...
STL系列之四 heap 堆
下面再介紹stl中與堆相關的4個函式 建立堆make heap 在堆中新增資料push heap 在堆中刪除資料pop heap 和堆排序sort heap 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數...
STL系列之四 heap 堆
下面再介紹stl中與堆相關的4個函式 建立堆make heap 在堆中新增資料push heap 在堆中刪除資料pop heap 和堆排序sort heap 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數...