STL(二十三)排序演算法

CopperDong發表於2017-09-03

    Sorting algorithms是一組將無序序列排列成有序序列的模板函式或與排序相關的模板函式,提供了排序、折半搜尋、歸併、集合操作、堆操作、最值求解、字典比較和排列組合等功能。

      排序演算法一般要求容器提供隨機訪問迭代器,一般適用於序列容器,如向量容器,佇列容器和字串容器等,但不適用於內部資料結構較為複雜的關聯容器,如集合容器、映照容器、雜湊集合容器和雜湊映照容器等。

一、元素入堆push_heap

      在優先佇列一章中,已對堆(heap)進行了簡要的介紹,現在用迭代器的形式給出更為詳細的說明和分析

二、建立堆make_heap

      make_heap演算法重新排列元素順序,使它們邏輯上構成一個堆

三、元素出堆pop_heap

    相對於元素入堆演算法push_heap,pop_heap演算法將元素進行出堆操作。與push_heap一樣,pop_heap必須對堆操作才有意義。

四、堆排序sort_heap

是一種利用堆進行排序的演算法

五、是否為堆is_heap

並不是C++標準演算法函式,而是SGI C++ STL的一個擴充套件演算法,用於判斷迭代器區間[first, last)元素是否構成一個預設的大根堆,或依照二元謂詞判斷comp的有序關係,是否構成一個堆

六、區域性排序partial_sort

僅對部分元素進行排序,通常用來挑選最小(或最大)的若干元素。由於內部使用堆排序來實現

七、區域性排序複製partial_sort_copy

本質上也是實行區域性的堆排序,只是排序結果被放置到另一個區間範圍中

八、排序sort

與堆排序一樣,sort演算法也要求使用隨機訪問迭代器進行排序

九、歸併merge

將兩個具有相同升降方向的有序序列,合併成一個有序序列

十、內部歸併inplace_merge

將一個序列內部兩個升降同向的子序列進行排序合併

十一、隱定排序stable_sort

也是將區間元素排序,但可保持等價元素的相對順序穩定不變

十二、是否排序is_sorted

用於判斷區間元素是否排序

十三、第n個元素nth_element

直觀地說,nth_element演算法僅排序第nth元素(從0開始索引)

十四、下確界lower_bound

用於在有序的區間中查詢首個不小於某值的元素(大於等於某值)

十五、上確界upper_bound

查詢有序區間中首個大於某值的元素(大於某值)

十六、等價區間equal_range

用折半方法查詢第一個和最後一個可以插入某值的元素,這些元素構成所謂的等價區間

十七、折半搜尋binary_search

在有序的區間中用折半方法搜尋等於某值的元素

十八、子集合includes

用於檢測一個有序區間是否包含另一個有序區間,相當於一個集合包含關係的判斷

十九、集合求並set_union

對兩個序列區間的元素進行集合求並

二十、集合求交set_intersection

對兩個有序區間的元素進行集合求交

二十一、集合求差set_difference

求兩個有序區間元素集合的差

二十二、集合求異set_symmetric_difference

對兩個有序區間的元素集合A和B進行求異

二十三、最小值min

min演算法返回兩個元素中的較小值

二十四、最大值max

返回兩個元素中的較大值

二十五、最小元素min_element

返回區間中的最小元素

二十六、最大元素max_element

返回區間中的最大元素

二十七、字典比較lexicographical_compare

按字典方式給出兩個區間序列的大小比較

二十八、下一排列組合next_permutation

對區間元素進行一次組合排序,使之字典順序大於原來的排列

二十九、上一排列組合prev_permutation

用於選擇一個字典順序更小的排列

















相關文章