任意类型排序
模拟qsort()函数,实现任意类型排序:
qsort()简介:
原型:
voidqsort(void*base,size_tnum,size_twidth,int(__cdecl*compare)(constvoid*elem1,constvoid*elem2)
base:要排序的的数组的首地址
num:要排序的元素的个数
width:元素所占的字节数
compare:函数指针,指向排序方式这个函数的指针。其中比较方式这个函数需要用户根据自己的需要
使用qsort要调用<stdlib.h>。
实现:
#include<stdio.h>#include<stdlib.h>intcompare(constvoid*elem1,constvoid*elem2)//比较方式{constint*str1=(constint*)elem1;constint*str2=(constint*)elem2;return*str1>*str2;//">"升序,“<"降序}voidsort(void*base,size_tnum,size_tbyte,int(*cmp)(constvoid*elem1,const*elem2)){char*str=(char*)base;intflag=0;constvoid*p1;constvoid*p2;for(size_ti=0;i<num-1;i++){flag=0;for(size_tj=0;j<num-1-i;j++){p1=(constvoid*)(str+(j*byte));p2=(constvoid*)(str+(j+1)*byte);if(cmp(p1,p2)){for(size_tk=0;k<byte;k++)//按字节交换{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;}}intmain(){int(*cmp)(constvoid*elem1,const*elem2)=compare;intarr[4]={20,40,5,4};sort(arr,4,4,cmp);for(inti=0;i<4;i++){printf("%d",arr[i]);}printf("\n");system("pause");return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。