表白网页在线生成网站,百度网盘app,网站设计应该遵循的原则,阿里云新增网站前言
我们要学习qsort函数并利用冒泡函数仿照qsort函数
首先我们要了解一下qsort#xff08;快速排序#xff09;
这是函数的的基本参数
void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));
简单解释一下
base#xff1a;指向…前言
我们要学习qsort函数并利用冒泡函数仿照qsort函数
首先我们要了解一下qsort快速排序
这是函数的的基本参数
void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));
简单解释一下
base指向的是待排序的数组第一个元素首地址
num是base指向的待排序数组的元素个数
size是base指向的排序数组的元素的大小 int (*compar)(const void*,const void*)是函数指针 是用来比较的是两个元素
比较的方式和返回的结果如下 下面图是需要自行创建的根据自己需要创建自己所要判断的类型 接下来演示一下
1. 快速排序整型
int cmp_int(const void *p1,const void *p2)//根据自己要求创建的函数
{return(*(int*)p1 - *(int*)p2);
}
int main()
{int arr[] { 9,8,7,6,5,4,3,2,1,0 };int sz sizeof(arr) / sizeof(arr[0]);//长度的qsort(arr, sz, sizeof(arr[0]), cmp_int);//调用//打印for (int i 0; i sz; i) {printf(%d , arr[i]);}printf(\n);return 0;
}结果 2.排序结构体
//创建结构体
struct Stu
{char name[20];int age;
};
//根据姓名进行排序
int comp_stu_by_name(const void* p1, const void* p2)
{return strcmp(((struct Stu*)p1)-name, ((struct Stu*)p2)-name);
}
//根据年龄排序
int comp_stu_by_age(const void* p1, const void* p2)
{return ((struct Stu*)p1)-age-((struct Stu*)p2)-age;} int main()
{struct Stu arr[3] { {zhangsan,20},{lisi,35},{wangwu,18}};int sz sizeof(arr) / sizeof(arr[0]);qsort(arr,sz,sizeof(arr[0]),comp_stu_by_age);//qsort(arr,sz,sizeof(arr[0]),comp_stu_by_name);return 0;
}
2.1年龄排序
初始情况按照数组内的排序
首先进行年龄排序利用监视查看 结果 2.2姓名排序
这里运用了strcmp库函数比较的是ASCII码 这里是根据字母排序的 所以根据字母的ASCII码进行排序
默认情况这样排序创建的数组内的排序 结果 3.qsort函数仿造
使用回调函数模拟实现qsort采⽤冒泡的⽅式。
冒泡函数在这【冒泡排序】-CSDN博客
接下来进行模仿
//1.判断
int cmp(const void *p1,const void *p2)
{return(*(int*)p1 - *(int*)p2);
}
//2.用来比较
void Swap(char* buf1, char* buf2, size_t wid)
{for (int i 0; i wid; i){char tmp *buf1;*buf1 *buf2;*buf2 tmp;buf1;buf2;}
}
void bubble_sort(void* base, int sz,size_t wid,int (*cmp)(const void*p1,const void*p2)) {for (int i 0; i sz; i){for (int j 0; j sz - 1 - i; j){//比较arr[j] arr[j 1]//强转成char*以防不知道默认是什么类型if (cmp((char*)basej*wid,(char*)base(j1)*wid)0)//改变{Swap((char*)base j * wid, (char*)base (j 1) * wid,wid);}}}
}
//结构体
struct Stu
{char name[20];int age;
};
int comp_stu_by_name(const void* p1, const void* p2)
{return strcmp(((struct Stu*)p1)-name, ((struct Stu*)p2)-name);
}
int comp_stu_by_age(const void* p1, const void* p2)
{return ((struct Stu*)p1)-age - ((struct Stu*)p2)-age;
}
int main()
{//整型//int arr[] { 9,8,7,6,5,4,3,2,1,0 };// int sz sizeof(arr) / sizeof(arr[0]);// bubble_sort(arr, sz, sizeof(arr[0]), cmp);// for (int i 0; i sz; i) {// printf(%d , arr[i]);// }//结构体struct Stu arr[3] { {zhangsan,20},{lisi,35},{wangwu,18} };int sz sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), comp_stu_by_age);//bubble_sort(arr, sz, sizeof(arr[0]), comp_stu_by_name);//调试查看return 0;
}
下面是实现的步骤