自己的排序函数sort_maopao,也来调用回调函数compare,希望能搞明白其中的原理。
void sort_maopao(void* p,int n,int size,int (*compare)(const void*,const void*)){
char* pc=(char*)p;
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(compare(pc+j*size,pc+(j+1)*size)==1){
char* tmp=new char[size];
memcpy(tmp,pc+j*size,size);
memcpy(pc+j*size,pc+(j+1)*size,size);
memcpy(pc+(j+1)*size,tmp,size);
delete[] tmp;
}
}
}
}
int compare(const void* a,const void* b){
if(*(int*)a<*(int*)b){
return -1;
}else if(*(int*)a==*(int*)b){
return 0;
}else{
return 1;
}
}
int main(){
int a[10]={10,9,8,7,6,5,4,3,2,1};
sort_maopao(a,10,sizeof(int),compare);
printf("排序后:\n");
for(int i=0;i<10;i++){
printf("%d\t",a[i]);
}
system("pause");
}
函数可以对任意类型数据排序,前提是compare写法正确。O(∩_∩)O