模擬qsort()函數(shù),實現(xiàn)任意類型排序:
尖山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),尖山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為尖山成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的尖山做網(wǎng)站的公司定做!
qsort()簡介:
原型:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 )
base:要排序的的數(shù)組的首地址
num:要排序的元素的個數(shù)
width:元素所占的字節(jié)數(shù)
compare:函數(shù)指針,指向排序方式這個函數(shù)的指針。其中比較方式這個函數(shù)需要用戶根據(jù)自己的需要
使用qsort要調(diào)用
實現(xiàn):
#include#include int compare(const void *elem1, const void *elem2) //比較方式 { const int *str1 = (const int *)elem1; const int *str2 = (const int *)elem2; return *str1>*str2; //">"升序,“<"降序 } void sort(void *base, size_t num,size_t byte, int(*cmp)(const void *elem1, const *elem2)) { char *str = (char *)base; int flag = 0; const void *p1; const void *p2; for (size_t i = 0; i < num - 1; i++) { flag = 0; for (size_t j = 0; j < num - 1 - i; j++) { p1 =(const void *)(str+(j*byte)); p2 = (const void *)(str+(j + 1)*byte); if (cmp(p1,p2)) { for (size_t k = 0; k < byte; k++) //按字節(jié)交換 { str[j*byte + k] = str[j*byte + k] + str[(j + 1)*byte + k]; str[(j+1)*byte + k] = str[j*byte + k] - str[(j + 1)*byte + k]; str[j*byte + k] = str[j*byte + k]-str[(j + 1)*byte + k]; } flag = 1; } } if (!flag) break; } } int main() { int(*cmp)(const void *elem1, const *elem2)=compare; int arr[4] = { 20,40,5, 4 }; sort(arr,4,4, cmp); for (int i = 0; i < 4; i++) { printf("%d ", arr[i]); } printf("\n"); system("pause"); return 0; }