qsort函式必須是對於連續的記憶體的資料進行排序,不能對鍊錶進行排序;
定義:qsort(基本快速排序的方法,每次把陣列分成兩部分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本快速排序的效率較低,且不穩定)。整合在c語言庫函式裡面的qsort函式,使用三路劃分的方法解決排序這個問題。所謂三路劃分,是指把陣列劃分成小於劃分值,等於劃分值和大於劃分值的三部分。
使用前需要加標頭檔案
#include
具體介紹
void __cdecl qsort (void base,size_t num,size_t width,int (__cdecl *comp)(const void ,const void*))
qsort(quicksort)主要根據你給的比較條件給乙個快速排序,主要是通過指標移動實現排序功能,排序之後的結果仍然放在原來陣列中。
引數意義:
base:待排序的陣列;或者說是需要排序的陣列名(也可以理解成開始排序的位址,因為可以寫成&s[i],這樣的表示式);
num: 陣列中待排序元素數量;
width:單個元素的大小(或者說是目標排序中的每乙個元素的長度)建議使用sizeof(s[0])這樣的表示式;
compare:用於對陣列元素進行比較的函式的指標(需要自己定義,用於確定排序的順序);
compare函式的分析:
返回值必須是int,引數是(const void*a,const void *b),如果是要公升序,那麼就是如果a比b大,返回乙個正值,小則返回負值,相等則為0,降序的話相反;
qsort函式的使用情況:
1.對int型別的陣列排序:
int num[100];
int compare(const
void *a,const
void *b)
code:
#include
#include
#include
int s[10000],n,i;
int cmp(const
void *a,const
void *b)
int main()
2.char陣列的排序(同int)
3.double陣列型別的排序(需要注意)
double s[100];
int cmp(const
void *a,const
void *b)
qsort(s,100,sizeof(s[0],cmp);
4.對結構體的一級排序:
struct ins[100];
//按照data的值進行排序,
int cmp(const
void *a,const
void *b)
s[100];
int cmp(const
void *a,const
void *b)
else//x元素相等時才用y排序;
}qsort(s,100,sizeof(s[0]),cmp);
6.對結構體中的字串進行排序:
struct ins[100];
int cmp(const
void *a,const
void *b)
qsort(s,100,sizeof(s[0]),cmp);
7.對字串進行排序
int cmp(const
void *a,const
void *b)
int main()
使用qsort需要注意的:
1.快排是不穩定的,這個不穩定乙個表現在其使用的時間是不確定的,最好情況(o(n))和最壞情況(o(n^2))差距太大,我們一般說的o(nlog(n))都是指的是其平均時間.另乙個不穩定表現在如果相同的比較元素,可能順序不一樣,假設我們有這樣乙個序列,3,3,3,但是這三個3是有區別的,我們標記為3a,3b,3c,快排後的結果不一定就是3a,3b,3c這樣的排列,所以在某些特定場合我們要用結構體來使其穩定。
元素相同解決辦法:
3.快排的比較函式的兩個引數必須都是const void *的,這個要特別注意,同時注意對兩個指標a,b進行強制轉換。
4.快排qsort的第三個引數,那個sizeof,推薦是使用sizeof(s[0])這樣,特別是對結構體。
5.如果要對陣列進行部分排序,比如對乙個s[n]的陣列排列其從s[i]開始的m個元素,只需要
在第乙個和第二個引數上進行一些修改:qsort(&s[i],m,sizeof(s[i]),cmp);
總結 與和
qsort函式的使用 C語言
qsort函式是一種可以實現多種型別資料比較的函式,可int,可float,可double等等 void qsort void base,int nelem,int width,int fcmp const void const void 函式引數介紹 1,要比較的陣列的位址,2.陣列的個數,3.陣...
C語言qsort函式的使用
函式原型 void qsort void base,int nelem,int width,int fcmp const void const 標頭檔案 include base 要排序的陣列 nelem 需要排序的長度 width 每個陣列元素的大小 cmp 比較函式 int型別的排序 int c...
C語言qsort 函式的使用
qsort 函式是 c 庫中實現的快速排序演算法,包含在stdlib.h標頭檔案中,其時間複雜度為 o nlogn 函式原型如下 void qsort void base,size t nmemb,size t size,int compar const void const void 此函式需要四...