qsort 的使用方法

2022-07-19 05:00:17 字數 1952 閱讀 3047

在 stdlib.h 中,有乙個 qsort(…) 函式,用於對給定的元素進行快速排序。

她的宣告是:

void qsort(

void *base,  /*待排序的陣列*/

size_t n,    /*陣列中元素的個數*/

size_t size,   /*陣列中每個元素所佔的記憶體位元組數*/

int (*cmp) (const void *,const void * )  /*對任意兩個元素進行比較的函式*/

具體說來,qsort(…)對base[0]…base[n-1]陣列中的物件,進行公升序排序,陣列中每個物件的長度位size。其中,cmp是乙個用於排序比較的函式。cmp的描述如下:如果第乙個引數(查詢關鍵字)小於第二個引數(表項),則必須返回乙個負值;如果第乙個引數等於第二個引數,則必須返回0;如果第乙個引數大於第二個引數,則必須返回乙個正數。

顯而易見,通過稍稍調整cmp比較的方式,就可以實現在qsort中的逆序排序。

具體的排序**,請見:這裡

我們先來看乙個簡單的例子,它說明了如何對乙個一維陣列中的元素進行排序。

**分析如下:

1

2 34 5

6 78 9

1011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

4849

50

/*利用qsort(),對乙個整數陣列進行公升序排序

輸入:源**內建整數陣列;

輸出:排序後的整數陣列*/

# include "stdio.h"

# include "stdlib.h"

# define num (6)

/*這是qsort(...)會用到的比較函式*/

intcmp(const

void * i, const

void * j)

/*展示data的內容*/

void

showdata(int data)

printf("\n");

return;

}int

main() ;

freopen("data.out.txt","w",stdout);

printf("%d\n",sizeof(int));

showdata(data);

qsort(

data, /*待排序的一維陣列的起始位址*/

num, /*待排序的元素的個數*/

sizeof(int), /*每個元素所佔的記憶體位元組數*/

cmp /*對任意兩個元素進行比較的函式*/

); showdata(data);

return

0;}

第11行的cmp()定義是很值得分析的:

引數 const void * i 要分成兩部分來看,

首先,是 void * i ,這表示乙個指標i,指標的型別是 void * 這是什麼型別的指標呢?

「ansi c的乙個最重要的變化是,它明確地制訂了操縱指標的規則。事實上,這些規則已經被很多優秀的程式設計人員和編譯器所採納。此外,ansi c使用型別 void * (指向void的指標)代替 char * 作為通用指標的型別。」(《c程式語言》第五章,第三段。)

qsort使用方法

在c 中qsort 排序函式的使用 qsort函式應用大全 七種qsort排序方法 本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num ...

Qt排序qSort使用方法

助手文件中對於qsort的介紹中,對於簡單型別的排序講解的很詳細了。這裡主要講對於結構體型別的排序 struct info qlistinfolist 在這裡對於infolist按照id字串排序 void netmanager devlistsort qlist list 在這裡使用lambda表示...

快排qsort的7種使用方法

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