小談C STL演算法 sorting

2021-06-22 14:05:19 字數 2691 閱讀 3763

c++stl

也提供了排序演算法

(sorting algorithms),

排序就是將一組無序的序列變成有序的序列.

首先介紹一下關於堆排序的內容

,下面就是關於堆排序的一些演算法函式

push_heap

元素入堆

,就是將乙個元素置入已構成的堆的迭代器區間中

,使得擴充套件的乙個元素的區間元素仍構成堆

.(會改變迭代器區間元素順序)

make_heap

重新排列元素順序

,使得他們在邏輯上構成乙個堆.

pop_heap

相對於push_heap,

實際上就是元素出堆操作

sort_heap

利用堆進行排序

is_heap

判斷迭代器區間是否構成乙個堆

partial_sort

堆部分函式進行排序

,內部也是使用堆排序

.(給定乙個迭代器區間和區間內的乙個元素

,對該元素前面的區間排序,)

partial_sort_copy

類似於partial_sort,

只是它是將結果放置到另乙個區間範圍中.

----

不過一定程度上堆排序的速度並不算快.

sort

是stl

當中比較常用的乙個排序演算法

,較之堆排序和標準c的

qsort

演算法都要快.

下面的**展示了如何使用

sort

實現序列的公升降序排列

#include

#include

using namespace std;

void print(int x)

int main(void);

const int len=sizeof(iarray)/sizeof(int);

//cout << "

公升序排序

" << endl;

sort(iarray, iarray+len);

for_each(iarray, iarray+len, print);

cout << endl;

//cout << "

降序排序

" << endl;

sort(iarray, iarray+len, greater());

for_each(iarray, iarray+len, print);

cout << endl;

return 0;

}merge

將兩個相同公升降序的序列合併成乙個有序的序列

inplace_merge

類似於merge,

用於將乙個序列內部兩個相同公升降序的子串行進行排序合併

stable_sort

類似於sort,

不過該演算法可以保持等價元素的相對順序穩定不變

下面的**展示了在對於結構體排序的實用性:

#include

#include

#include

using namespace std;

struct student

};bool compbyscore(student s1, student s2)

void print(student s)

int main(void)

is_sorted

判斷迭代器區間內的元素是否排序

nth_element

僅排序第

nth個元素

,就是使得該元素前面的元素小於等於

(或者大於等於

)該元素

,後面的元素大於等於

(或者小於等於該元素)

如果不理解的話

,就參考下面**:

#include

#include

using namespace std;

void print(int x)

int main(void);

const int len=sizeof(iarray)/sizeof(int);

//for_each(iarray, iarray + len, print);

cout << endl;

//cout << "after nth_element 9th:\n";

nth_element(iarray, iarray + 9, iarray + len);

for_each(iarray, iarray + len, print);

cout << endl;

return 0;

}lower_bound

查詢有序區間中首個不小於指定值的元素.

upper_bound

對應於lower_bound,

查詢有序區間中首個不大於指定值的元素.

Hash演算法小談

hash演算法小談 一 初識hash 一直都只知道hash是一種演算法,但是具體是什麼一直都是模糊的概念。之前知道object類中有hashcode 方法,此方法返回該物件的雜湊碼值。而雜湊碼值物件的記憶體位址。hash其實就是一種儲存資料的結構,一般來說我們所了解熟 悉的結構有 陣列 鍊錶 佇列 ...

演算法小談 遞迴

基本概念 乙個函式呼叫它自身,就是遞迴 如求n的階乘的遞迴 includeusing namespace std int factorial int n int main 這裡在求n的階乘時,我們就用到遞迴的概念。假如n 3,那麼函式首先呼叫factorial 3 將函式呼叫壓入棧,繼續呼叫fact...

Notes 排序演算法小結 Sorting

最近兩天,複習了幾個經典的排序演算法。在這裡,寫乙份小結,粗略回顧。1 bubble sort 顧名思義,就是把最小的數如冒泡一樣,在每次的遍歷當中,移到最頂的位置。public void bubblesort int input swap input,i,min index 分析該排序演算法,比較...