模擬qsort()函數(shù),實現(xiàn)任意類型排序:
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)用<stdlib.h>。
實現(xiàn):
#include<stdio.h> #include<stdlib.h> 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; }
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
網(wǎng)頁題目:任意類型排序-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://chinadenli.net/article40/dessho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、手機網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容