#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>
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++;
}
}
int int_cmp(const void *n1, const void *n2)//排序整型数组
{
return *(int *)n1-*(int*)n2;//将void *强制转换为int*,然后进行指针的运算
}
int str_cmp(const void *n1, const void *n2)//排序字符串型
{
return strcmp(*(char **)n1, *(char **)n2);//这里的char **可以看做是(char*)(char*)
}
/*base 首元素的地址,sz 长度,width 宽度(此类型数据占用的字节数), compare 比较*/
void bubble_sort(void *base,int sz,size_t width,int (*compare)(const void *elem1, const void *elem2))
{
int i=0;
int j=0;
for(i=0;i<sz-1;i++)
for(j=0;j<sz-1-i;j++)
if(compare((char* )base+j*width,(char*) base+(j+1)*width)>0)//将参数转换为(char*)在加上它的宽度
_Swap((char*) base+j*width,(char* )base+(j+1)*width,width);
}
int main()
{
char *arr[]={"aaaaa","bfafa","vsfwr"};
int sz=sizeof(arr)/sizeof(arr[0]);
int i=0;
bubble_sort(arr,sz,sizeof(char*),str_cmp);
for(i=0;i<sz;i++)
{
printf("%s\n",arr[i]);
}
system("pause");
return 0;
}
冒泡排序,可以排多种类型
最新推荐文章于 2022-02-17 11:26:15 发布