qsor快排序以及cmp函式

2022-06-27 18:33:11 字數 1539 閱讀 6666

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

標頭檔案:stdlib.h

舉例:char a[1000];

int m=strlen(a);

qsort(a,m,sizeof(a[0]),cmp);

qsort中的cmp函式感覺是使用者自定義的,根據其不同的資料型別

接下來介紹不同資料型別所定義的cmp函式

1.int a[1000];int 陣列

qsort(a,1000,sizeof(int),comp);

其中comp函式應寫為:

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

compare 函式的返回值

描述< 0

elem1將被排在elem2前面

0elem1 等於 elem2

> 0

elem1 將被排在elem2後面

註明:*(int*)a就是取a指向的內容的意思。

上面是由小到大排序,return *(int *)b - *(int *)a; 為由大到小排序。

2.char a[20];  字元陣列

qsort(a,20,sizeof(a[0]),cmp);

int find(char b,char a)

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

3.int a[1000][2];二維陣列

qsort(a,1000,sizeof(int)*2,cmp);

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

4.對字串進行排序

int comp(const void*p1,const void*p2)

int main()

s[100];

int comp(constvoid*p1,constvoid*p2)

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

6.按結構體中多個關鍵字排序(對結構體多級排序)[以二級為例]:

struct node

s[100];

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

int comp(const void*p1,const void*p2)

7.對結構體中字串進行排序:

struct node

s[100];

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

int comp(const void*p1,const void*p2)

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

C 排序函式中cmp 比較函式詳解

整型資料比較 bool cmp int a,int b int a 10 sort a,a 10,cmp 實型資料比較 bool cmp float a,float b int a 10 sort a,a 10,cmp 結構體型別比較 題目 有n個學生的資料,將學生資料按成績高低排序,如果成績相同則...

Java 快速排序,以及雙基快排

單基準快排 使用 quicksort arr,0,arr.length 1 排序整個陣列 private static void quicksort int arr,int left,int right return lt的左邊放小於基準值的值 gt的右邊放大於基準值的值 lt與gt其中乙個是基準值...

C 內建比較函式sort和cmp排序問題和注意點

刷題中排序常用,sort指出三個引數 起始位置 終止位置 cmp函式排序方法 其中值得注意的是,尾元素是最後乙個元素的下一位置 對於sort,vector也可以,使用begin和end指標即可,其他普通陣列直接是頭指標,頭指標 元素個數 重點在於cmp的問題,這裡經常混淆,只需要記住 希望元素按什麼...