功 能: 使用快速排序例程进行排序
头文件:stdlib.h
用 法:
void qsort( void *base, size_t num,(元素个数) size_t width,(每个元素的大小) int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
compare( (void *) elem1, (void *) elem2 );
参数: 1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
有关代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Swap(char*buf1, char*buf2,int sz)
{
int k = 0;
for (k = 0; k < sz; k++)
{
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
void bubble_sort(void *base, int num, int width, int(*pf)(const void *e1, const void *e2))
{
int i = 0;
int j = 0;
for (i = 0; i < num - 1; i++)
{
for (j = 0; j < num - 1 - i; j++)
{
if (pf((char*)base + j*width, (char*)base + (j + 1)*width) > 0)//从而比较函数中的每个元素
{
Swap((char*)base + j*width, (char*)base + (j + 1)*width,width);//将宽度传递过去,从而知道每个元素的大小
}
}
}
}
struct S
{
char name[20];
int age;
};
int cmp(const void *e1, const void *e2)
{
return *(int*)e1 - *(int*)e2;
}
int cmp_age(const void *e1, const void *e2)
{
return (*(struct S*)e1).age - (*(struct S*)e2).age;
}
int cmp_name(const void *e1, const void *e2)
{
return strcmp((*(struct S*)e1).name , (*(struct S*)e2).name);
}
int main()
{
int i = 0;
//int arr[] = { 1, 3, 5, 6, 8, 9, 4, 2, 7 };
struct S arr[] = { { "zhangsan", 12 }, { "lisi", 15 }, { "wangwu", 10 } };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz, sizeof(arr[0]), cmp_age);
/*for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}*/
system("pause");
return 0;
}