qsort函式解析 應用及底層原理

2021-10-21 02:09:09 字數 3138 閱讀 1769

qsort函式可以對任意型別資料排序,標頭檔案為,其函式原型為

void

qsort

(void

*base, size_t num, size_t width,

int(__cdecl *compare )

(const

void

*elem1,

const

void

*elem2 )

);

第乙個元素為所要排序資料的起始資料的位址,第二個元素為資料元素個數(寬度),第三個元素為資料的位元組大小,第四個為比較函式,用來進行比較

#include

#include

/*int cmp(const void *e1,const void *e2)

*/int

cmp(

const

void

*e1,

const

void

*e2)

// void* 的指標變數,可以接受任意型別的位址

//因為 void* 的指標,沒有具體型別,所以不能解引用操作,不能++和--

void

test1()

;int s=

sizeof

(arr)

/sizeof

(arr[0]

);qsort

(arr,s,

sizeof

(arr[0]

),cmp)

;int i=0;

for(i=

0;i)printf

("%d "

,arr[i]);

}int

main()

e1和e2為所要進行比較的元素,為void型別的指標,void型別指標沒有具體型別,不能進行解引用操作,所以要進行整形強制型別轉換,再解引用

比較函式有兩種寫法

int

cmp(

const

void

*e1,

const

void

*e2)

當返回值為1時,說明e1所指的數大於e2所指的數,進行交換

第二種為

int

cmp(

const

void

*e1,

const

void

*e2)

如果想要進行降序排序,將e1和e2對換即可

int

cmp(

const

void

*e1,

const

void

*e2)

#include

struct stu

;/*int cmp(const void*e1,const void *e2)

*/int

cmp(

const

void

*e1,

const

void

*e2)

void

test1()

,,};

int s=

sizeof

(arr)

/sizeof

(arr[0]

);qsort

(arr,s,

sizeof

(arr[0]

),cmp)

;int i=0;

for(i=

0;iintmain()

如果對結構體中的數字進行排序,比較函式寫為

int

cmp(

const

void

*e1,

const

void

*e2)

如果對結構體中的字串進行排序,比較字串需用到strcmp函式,其返回值與qsort函式的返回值相同

int

cmp(

const

void

*e1,

const

void

*e2)

#include

void

swap

(char

*buf1,

char

*buf2,

int width)

}void

bubble_sort

(void

*base,size_t sz,size_t width,

int(

*cmp)

(const

void

*e1,

const

void

*e2))}

}}intcmp

(const

void

*e1,

const

void

*e2)

void

test1()

;int s=

sizeof

(arr)

/sizeof

(arr[0]

);bubble_sort

(arr,s,

sizeof

(arr[0]

),cmp)

;int i=0;

for(i=

0;i)printf

("%d "

,arr[i]);

}int

main()

用bubble_sort函式書寫qsort函式

對起始位址(base)進行char*型別的強制轉換後,再加上對應的位元組,解引用可找到對應的資料,再另寫乙個進行交換的函式

void

swap

(char

*buf1,

char

*buf2,

int width)

}

進行交換是將兩個資料的位址進行依次交換

qsort函式應用大全

七種qsort排序方法 本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 cha...

qsort函式應用大全

一 對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 con...

qsort函式應用大全

七種qsort排序方法 本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 cha...