qsort函式可以對任意型別資料排序,標頭檔案為,其函式原型為
void
qsort
(void
*base, size_t num, size_t width,
int(__cdecl *compare )
(const
void
*elem1,
const
void
*elem2 )
);
第乙個元素為所要排序資料的起始資料的位址,第二個元素為資料元素個數(寬度),第三個元素為資料的位元組大小,第四個為比較函式,用來進行比較
#include
#include
/*int cmp(const void *e1,const void *e2)
*/int
cmp(
const
void
*e1,
const
void
*e2)
// void* 的指標變數,可以接受任意型別的位址
//因為 void* 的指標,沒有具體型別,所以不能解引用操作,不能++和--
void
test1()
;int s=
sizeof
(arr)
/sizeof
(arr[0]
);qsort
(arr,s,
sizeof
(arr[0]
),cmp)
;int i=0;
for(i=
0;i)printf
("%d "
,arr[i]);
}int
main()
e1和e2為所要進行比較的元素,為void型別的指標,void型別指標沒有具體型別,不能進行解引用操作,所以要進行整形強制型別轉換,再解引用
比較函式有兩種寫法
int
cmp(
const
void
*e1,
const
void
*e2)
當返回值為1時,說明e1所指的數大於e2所指的數,進行交換
第二種為
int
cmp(
const
void
*e1,
const
void
*e2)
如果想要進行降序排序,將e1和e2對換即可
int
cmp(
const
void
*e1,
const
void
*e2)
#include
struct stu
;/*int cmp(const void*e1,const void *e2)
*/int
cmp(
const
void
*e1,
const
void
*e2)
void
test1()
,,};
int s=
sizeof
(arr)
/sizeof
(arr[0]
);qsort
(arr,s,
sizeof
(arr[0]
),cmp)
;int i=0;
for(i=
0;iintmain()
如果對結構體中的數字進行排序,比較函式寫為
int
cmp(
const
void
*e1,
const
void
*e2)
如果對結構體中的字串進行排序,比較字串需用到strcmp函式,其返回值與qsort函式的返回值相同
int
cmp(
const
void
*e1,
const
void
*e2)
#include
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))}
}}intcmp
(const
void
*e1,
const
void
*e2)
void
test1()
;int s=
sizeof
(arr)
/sizeof
(arr[0]
);bubble_sort
(arr,s,
sizeof
(arr[0]
),cmp)
;int i=0;
for(i=
0;i)printf
("%d "
,arr[i]);
}int
main()
用bubble_sort函式書寫qsort函式
對起始位址(base)進行char*型別的強制轉換後,再加上對應的位元組,解引用可找到對應的資料,再另寫乙個進行交換的函式
void
swap
(char
*buf1,
char
*buf2,
int width)
}
進行交換是將兩個資料的位址進行依次交換 qsort函式應用大全
七種qsort排序方法 本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 cha...
qsort函式應用大全
一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 char word 100 sample int cmp con...
qsort函式應用大全
七種qsort排序方法 本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 cha...