要模拟实现函数我们要先学习qsort函数
通过上图我们可以知道函数的基本信息
qsort函数是基于快速排序思想实现的排序函数
void *base,是要排序数据的起始位置
size_t num,是待排数据的元素个数
size_t width, 是待排数据的元素大小(字节大小)
int (__cdecl *compare )(const void *elem1, const void *elem2 ) 是对数据比较的比较函数
该函数的头文件是<stdlib.h>
接下来我们举个例子让大家看看函数效果
既然我们要用冒泡排序来实现它那让我们来看看冒泡排序怎么排序数组
void maopao (int* add,int n) {
int x = 0;
for (int i = 0; i < n - 1; i++) {
int* a = add;
int* b = add + 1;
for (int j = 0; j < n-1-i; j++) {
if (*a > *b) {
x = *a;
*a = *b;
*b = x;
}
a++;
b++;
}
}
}
接下来我们用冒泡排序的思想来实现qsort函数
void my_qsort(void* add, size_t num, size_t net, int (*bijiao)(const void*, const void*)) {
char a = 0;
for (int i = 0; i < num - 1; i++) {
void* pa1 = (char*)add;
void* pa2 = (char*)add +net;
for (int j = 0; j < num - 1 - i; j++) {
if ((*bijiao)(pa1,pa2)>0) {
for (int x = 0; x < net; x++) {
a=*((char*)pa1+x);
*((char*)pa1+x) = *((char*)pa2+x);
*((char*)pa2+x) = a;
}
}
pa1=(char*)pa1 + net;
pa2=(char*)pa1 + net;
}
}
}