程式設計備忘錄之qsort和sort

2021-06-22 03:07:31 字數 760 閱讀 2256

今天程式設計時發現了乙個有趣又實用的庫函式qsort,該函式在stdlib.h標頭檔案中定義。qsort基於快速排序,能夠對連續記憶體中的資料進行排序,例如陣列,但是不能對鍊錶進行排序。排序完成後的資料仍在原陣列中,只是已經按照我們需要的順序排列好了。下面看一下函式原型:

void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

其中,base為要排序的陣列,nelem表示元素個數,width表示sizeof(陣列元素型別),fcmp為比較大小的函式,輸入為兩個待比較元素的指標。當要求按遞增排序時,返回正數表示*a的分量比*b的大、負數反之、0表示相等。遞減排序時則相反。

知道了這個函式,以後再碰到排序時不用傻乎乎的自己寫排序程式了。

還有乙個公升級版的函式sort,在c++中包含在標頭檔案裡。

sort()和qsort一樣,也是乙個很好用的函式。sort()預設使用公升序排序。只要往引數中傳遞乙個迭代器區間即可(注意迭代器區間為左閉右開區間)。例如:

sort(vec.begin(),vec.end());

如果要使用降序,或者無法判斷陣列中元素的大小,可以自己定義「小於」,然後作為引數傳遞到sort中。例如定義乙個整數陣列的比較函式如下:

bool cmp(int a,int b)

然後呼叫sort(vec.begin(),vec.end(),cmp);即進行降序排序。

當然了,比較函式的輸入變數型別未必是int,而是你vector的元素型別。

設計模式之備忘錄模式

機器 public class machine public void startplay disc.setluminance 60 disc.settime 0 disc.setvolume 80 public void stopplay disc.setluminance 70 disc.set...

iOS備忘錄之Git命令

自用備忘錄 git branch master 建立master分支 git clone 轉殖工程 git branch 檢視當前分支 git pull origin guide 拉取分支 git checkout b guide origin guide 將遠端分支對映到本地命名為guide 的一...

設計模式之備忘錄模式

定義 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。備忘錄模式有三個角色 以儲存遊戲進度為例,退出遊戲前存檔,再進入遊戲就會顯示退出之前的狀態。示例 遊戲發起人類 public class game public state cr...