c語言qsort的使用及練習

2021-10-11 22:52:41 字數 2836 閱讀 2508

三.模擬實現

routine

required header

compatibility

qsortandansi, win 95, win nt

用法:

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

四個引數:

1.void*base: 待排序陣列的位址,即陣列名

2.size_t num: 陣列待排序元素的個數

3.size_t width: 各元素所佔位元組數

4.int (__cdecl *compare )(const void *elem1, const void *elem2): 自定義的函式指標,用於確定排序的順序(需要使用者自定義乙個比較函式),預設排序方式為公升序

返回值:

return value

description

< 0

elem1 less than elem2

=0elem1 equivalent to elem2

>0

elem1 greater than elem2

一道簡單排序題,這裡用qsort函式實現

#include

#include

intcmp

(const

void

* p1,

const

void

* p2)

//形參格式不能改

intmain()

qsort

(a, n,

sizeof

(a[0])

, cmp)

;for

(i =

0; i <

5; i++

)}

字母異位詞

#include

#include

#include

intcmp

(const

void

* p1,

const

void

* p2)

bool b

(char

* s,

char

* t)

qsort

(s, ls,

sizeof

(s[0])

, cmp)

;qsort

(t, lt,

sizeof

(t[0])

, cmp);if

(strcmp

(s, t)==0

)}intmain()

else

}

同int陣列型別類似,型別轉換時轉換成char*即可

#include

#include

intcmp

(const

void

* p1,

const

void

* p2)

intmain()

在對浮點或者double型的一定要用三目運算子,因為要是使用像整型那樣相減的話,如果是兩個很接近的數則可能返回乙個很小的小數(大於-1,小於1),而cmp的返回值是int型,因此會將這個小數返回0,系統認為是相等,失去了本來存在的大小關係

#include

struct stu

;int

cmp_by_age

(const

void

* e1,

const

void

* e2)

void

test2()

,,};

int sz =

sizeof

(arr)

/sizeof

(arr[0]

);qsort

(arr, sz,

sizeof

(arr[0]

), cmp_by_age);}

intmain()

#include

#include

intcmp

(const

void

* e1,

const

void

* e2)

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

}}intmain()

;int sz =

sizeof

(arr)

/sizeof

(arr[0]

);my_qsort

(arr, sz,

sizeof

(arr[0]

), cmp)

;}

c語言qsort的使用

基於快速排序對陣列進行排序,陣列元素可以是結構體。qsort屬於內建函式,需要包含標頭檔案 stdlib.h void qsort void ptr,size t count,size t size,int comp const void const void void ptr 空指標,指向需要排序...

qsort使用練習

第一次嘗試 include include include define max 10 define max c 4 void cmp int const void a,const void b 上面為規範寫法,下面是我理解覺得可以通過編譯的 整型 intcmp int int a,int b 浮點...

C語言qsort函式的使用

qsort函式必須是對於連續的記憶體的資料進行排序,不能對鍊錶進行排序 定義 qsort 基本快速排序的方法,每次把陣列分成兩部分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本快速排序的效率較低,且不穩定 整合在c語言庫函式裡面的qsort函式,使用三路劃分的方法解決排序這個問題。所謂三路劃...