在 stdlib.h 中,有乙個 qsort(…) 函式,用於對給定的元素進行快速排序。
她的宣告是:
void qsort(具體說來,qsort(…)對base[0]…base[n-1]陣列中的物件,進行公升序排序,陣列中每個物件的長度位size。其中,cmp是乙個用於排序比較的函式。cmp的描述如下:如果第乙個引數(查詢關鍵字)小於第二個引數(表項),則必須返回乙個負值;如果第乙個引數等於第二個引數,則必須返回0;如果第乙個引數大於第二個引數,則必須返回乙個正數。void *base, /*待排序的陣列*/
size_t n, /*陣列中元素的個數*/
size_t size, /*陣列中每個元素所佔的記憶體位元組數*/
int (*cmp) (const void *,const void * ) /*對任意兩個元素進行比較的函式*/
顯而易見,通過稍稍調整cmp比較的方式,就可以實現在qsort中的逆序排序。
具體的排序**,請見:這裡
我們先來看乙個簡單的例子,它說明了如何對乙個一維陣列中的元素進行排序。
**分析如下:
第11行的cmp()定義是很值得分析的:12 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;}
引數 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...