模拟库函数qsort

时间:2023-01-06 21:56:37
#include<stdio.h>
#include<string.h>
struct Stu
{
char name[20];
int age;
};
void Swap(char* buf1,char* buf2,int width)
{
int i=0;
for(i=0;i<width;i++)
{
char tmp=*buf1;
*buf1=*buf2;
*buf2=tmp;
buf1++;
buf2++;
}
}
void bubble_sort(void* base,int sz,int width,int (*cmp)(const void* e1,const void* e2))
{
int i=0;
//趟数
for(i=0;i<sz-1;i++)
{
//每一趟比较的对数
int j=0;
for(j=0;j<sz-1;j++)
{
//两个数的比较
if(cmp((char*)base+j*width,(char*)base+(j+1)*width)>0)
Swap((char*)base+j*width,(char*)base+(j+1)*width,width);

}
}
}
int cmp_stu_by_name(const void* e1,const void* e2)
{
return strcmp(((struct Stu*)e1)->name,((struct Stu*)e2)->name);
}

void test2()
{
int i=0;
struct Stu s[3]={{"zhangsan",20},{"lisi",30},{"wangwu",10}};
int sz=sizeof(s)/sizeof(s[0]);
bubble_sort(s,sz,sizeof(s[0]),cmp_stu_by_name);

}

int cmp_int(const void* e1,const void* e2)
{
return *((int*)e1)-*((int*)e2);
}

void test1()
{
int i=0;
int arr[10]={1,2,3,4,5,6,7,8,9,0};
int sz=sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);
for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
}

int main()
{
test1();
test2();
return 0;
}