qsort和sort學習與比較

2021-06-23 03:33:09 字數 2390 閱讀 4673

1.qsort函式:

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

功 能:使用快速排序例程進行排序

參 數:

1 待排序陣列首位址

2 陣列中待排序元素數量

3 各元素的占用空間大小

4 指向函式的指標,用於確定排序的順序

說 明:qsort函式是ansi c標準中提供的,其宣告在stdlib.h檔案中,是根據二分法寫的,其時間複雜度為n*log(n)。

qsort要求提供的函式是需要自己定義的乙個比較函式,比較函式使得qsort通用性更好。有了比較函式qsort可以實現對陣列、字串、結構體等結構進行公升序或降序排序。

如int cmp(const void *a, const void *b)中有兩個元素作為引數(引數的格式不能變的。)返回乙個int值,如果比較函式返回大於0,qsort就認為a > b,返回小於0,qsort就認為a < b。qsort知道元素的大小了,就可以把大的放前面去。如果你的比較函式返回本來應該是1的(即a > b),而卻返回-1(小於0的數),那麼qsort認為a < b,就把b放在前面去,但實際上是a > b的,所以就造成了降序排序的差別了。簡單來說,比較函式的作用就是給qsort指明元素的大小事怎麼比較的。

2.qsort中幾種常見的cmp函式:

一、對int型別陣列排序

int num[100];

int cmp ( const void *a , const void *b )

qsort(num,100,sizeof(num[0]),cmp); 

二、對char型別陣列排序(同int型別)

char word[100];

int cmp( const void *a , const void *b )

qsort(word,100,sizeof(word[0]),cmp);

三、對double型別陣列排序(特別要注意)

double in[100];

int cmp( const void *a , const void *b )

qsort(in,100,sizeof(in[0]),cmp); 

四、對結構體一級排序

struct in

s[100]

//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵資料data的型別可以很多種,參考上面的例子寫 

int cmp( const void *a ,const void *b)

qsort(s,100,sizeof(s[0]),cmp); 

五、對結構體二級排序

struct in

s[100];

//按照x從小到大排序,當x相等時按照y從大到小排序 

int cmp( const void *a , const void *b )

qsort(s,100,sizeof(s[0]),cmp); 

六、對字串進行排序

struct in

s[100];

//按照結構體中字串str的字典順序排序 

int cmp ( const void *a , const void *b )

qsort(s,100,sizeof(s[0]),cmp); 

七、計算幾何中求凸包的cmp

int cmp(const void *a,const void *b) //重點cmp函式,把除了1點外的所有點,旋轉角度排序 

3.sort和qsoort比較:

1.cmp函式和qsort中cmp函式的不同

int cmp(const int &a,const int &b)

sort中的cmp函式引數可以直接是參與比較的引用型別。

2.cmp函式比較時qsort用「-」,而sort用」>」.這也是乙個重要的區別。

3.sort函式是c++中標準模板庫的的函式,在qsort()上已經進行了優化,根據情況的不同可以採用不同的演算法,所以較快。在同樣的元素較多和同樣的比較條件下,sort()的執行速度都比qsort()要快。另外,sort()是類屬函式,可以用於比較任何容器,任何元素,任何條件。使用時需呼叫

sort(begin(),end(),cmp),

c 中sort和qsort的比較

例如 int cmp const void a,const void b int a 5 qsort a,5,sizeof int cmp void sort 待排序陣列首位址,待排序陣列結束位址,排序的方法 其中,排序的方法可以不寫,這樣預設為從小到大。例如 從小到大 bool cmp const...

C STL中sort和C中qsort比較

c stl中sort用法 include 一 sort begin,end,method sort 目前採用的是加強版的快速排序,是結合內插排序的快速排序 目的在於克服快速排序在最初情況 元素基本有序 的效率底下。1.sort中method 預設用法 從小到大排序 int a 陣列 sort a,a...

模板 qsort和sort的詳解和比較函式的區別

下面先對qsort和sort進行詳細的解釋,然後再將區別!需要特別注意的就是qsort和sort的比較函式的寫法,很容易出錯 first qsort 基本快速排序的方法,每次把陣列分成兩分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本排序的效率較低。整合在c語言庫函式裡面的的qsort函式,...