下面再介紹stl中與堆相關的4個函式——建立堆,新增資料,刪除資料,堆排序:
標頭檔案 #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了
有關堆與堆排序的更詳細介紹請參閱——《
白話經典演算法系列之七 堆與堆排序》
view plain
copy to clipboard
print?
//by morewindows( )
#include
#include
#include
#include
using
namespace std;
void printfvectorint(vector &vet)
int main()
掌握其基本用法後,我們用這個堆排序和
《白話經典演算法系列》
中的堆排序
、快速排序
,歸併排序
來進行個效能測試(win7 + vs2008 release下),測試**如下:
view plain
copy to clipboard
print?
// by morewindows( )
#include
#include
#include
using
namespace std;
//------------------------快速排序----------------------------
void quick_sort(int s, int l, int r)
s[i] = x;
quick_sort(s, l, i - 1); // 遞迴呼叫
quick_sort(s, i + 1, r);
}
}
//------------------------歸併排序----------------------------
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void mergearray(int a, int first, int mid, int last, int temp)
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(int a, int first, int last, int temp)
}
bool mergesort(int a, int n)
//------------------------堆排序---------------------------
inline
void swap(int &a, int &b)
//建立最小堆
// 從i節點開始調整,n為節點總數 從0開始計算 i節點的子節點為 2*i+1, 2*i+2
void minheapfixdown(int a, int i, int n)
a[i] = temp;
}
//建立最小堆
void makeminheap(int a, int n)
void minheapsorttodescendarray(int a, int n)
}
const
int maxn = 5000000;
int a[maxn];
int b[maxn], c[maxn], d[maxn];
int main()
對100000(十萬)個資料的測試結果:
對500000(五十萬)個資料的測試結果:
對1000000(一百萬)個資料的測試結果:
對5000000(五百萬)個資料的測試結果:
從中可以看出快速排序的效率確實要比其它同為o(n * logn)的排序演算法要高,而stl中堆操作函式的效能與《
白話經典演算法系列之七 堆與堆排序
》一文中堆操作函式的效能是相差無幾的。
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為比較函式 仿函式 其規則 如果函式的第乙個引數...
STL系列之四 heap 堆
下面再介紹stl中與堆相關的4個函式 建立堆make heap 在堆中新增資料push heap 在堆中刪除資料pop heap 和堆排序sort heap 標頭檔案 include 下面的 first與 last為可以隨機訪問的迭代器 指標 comp為比較函式 仿函式 其規則 如果函式的第乙個引數...