qsort 快速排序

2021-06-13 03:10:43 字數 1555 閱讀 4433

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

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

其中:*base 為要排序的陣列

nelem 為要排序的陣列的長度

width 為陣列元素的大小(以位元組為單位)

預設是從小到大排序的!

qsort 要求提供乙個比較函式,是為了做到通用性更好一點。比較函式的作用就是給qsort指明元素的大小是怎麼比較的。

像這樣的比較函式  int mycmp(const void* a, const void* b) 

都是有兩個元素作為引數,返回乙個int值, 如果比較函式返回大於0,qsort就認為 a>b;如果比較函式返回等於0,qsort就認為a=b;返回小於零 qsort就認為 a

《本文中排序都是採用的從小到大排序》 

一、對int型別陣列排序 

int num[100]; 

sample: 

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

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

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

char word[100]; 

sample: 

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); 

ps: 其中的qsort函式包含在的標頭檔案裡

qsort 快速排序

cpp view plain copy print?void qsort void base,size t nmemb,size t size,int compare const void const void 函式原型在中找到 html view plain copy print?base 指向陣...

qsort快速排序

函式原型 void qsort void base size t num,size t width,int cdecl compare const void const void 標頭檔案 stdlib.h size t num 陣列中待排序元素的數量 size t width 各元素占用空間大小 ...

qsort快速排序

qsortc語言自帶的快速排序,今天來玩玩,直接看 2.陣列中待排序元素數量 3.各元素的占用空間大小 4.指向函式的指標,用於確定排序的順序 include include qsort排序結構體 typedef struct node node int compinc1 const void a,...