目录
1.了解一下qsort函数的参数和实现思路
2.实现代码:
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);}}}}