目录
1.了解一下qsort函数的参数和实现思路
A.先看看参数:
void* base:需要排序数组的首地址。
size_t num:数组元素个数。
size_t size:每个元素的大小。
int (*compar)(const void*,const void*):一个返回值为int的函数指针compar。
关于compar: compar是自己编写的函数,根据需要排序的数据不同也需要用不同的比较方式。返回值是: 当前>后时返回正数,反之返回负数。
B.关于实现思路:
基本排序思想利用冒泡即可,而关键是排序中比较方法和交换方法的实现。因为是任意数据,所以要实现一种通用的函数。让我们看看一种实现方案:
2.实现代码:
A.比较算法(数据类型为int):
int cmp(void* p1, void* p2)
{
return *(int*)p1 - *(int*)p2;
}
B。交换算法:
void swap(char* p1, char* p2,int width)
{
int i = 0;
for (i = 0; i < width; i++)
{
char* temp = *(p1 + i);
*(p1+i) = *(p2+i);
*(p2 + i)=temp;
}
}
C.最后排序的实现:
void my_qsort(void* arr, int len, int width)
{
int i = 0; int j = 0;
for (i = 0; i < len; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
if (cmp((char*)arr + j*width, (char*)arr + (j + 1)*width)>0)
{
swap((char*)arr + j*width, (char*)arr + (j + 1)*width,width);
}
}
}
}