#该内容是根据是听完比特课后进行整理再加以自己的补充qsort函数对任意数据进行排序qsort函数介绍qsort函数是专门用来对任意数据进行排序的函数包括整型、浮点型、字符串、结构体函数等qsort函数 void qsort(void* base,//base指向待排序数组的第一个元素的指针 size_t num,//base指向的数组的元素个数 size_t size,//base指向的数组中一个元素的大小字节的长度 int(*cmp)(count void*,condt void*)//函数指针--传递函数的地址 );对整型数组进行排序#include stdio.h #include stdlib.h//使用qsort函数时需要包含的头文件 #define N 10 void input_arr(int *arr,int sz) { printf(请输入%d个数据\n,N); for(int i 0;i sz;i) { scanf(%d,arri); } } int cmp_qsort(const void*p1,const void*p2) { return (*(int *)p1-*(int *)p2); } void print_arr(int *arr,int sz) { for(int i 0;i sz;i) { printf(%-3d,arr[i]); } } void test1() { int arr[N] {0}; int sz sizeof(arr) / sizeof(arr[0]); input_arr(arr,sz); qsort(arr,sz,sizeof(arr[0]),cmp_qsort); print_arr(arr,sz); } int main(void) { test1(); return 0; }对结构体函数进行排序分别通过姓名和年龄进行排序//通过名字进行排序 #include stdio.h #include stdlib.h #include string.h struct stu { char name[10]; int age; };//构造一个结构体包含名字和年龄两个变量 int cmp_by_name_qsort(const void*p1,const void*p2) { return strcmp(((struct stu*)p1)-name,((struct stu*)p2)-name);//对于字符串运用strcmp函数进行比较使用时要包含头文件string.h } void test2() { struct stu arr[] {{zhangsan,20},{wangwu,22},{lisi,18}}; int sz sizeof(arr) / sizeof(arr[0]); qsort(arr,sz,sizeof(arr[0]),cmp_by_name_qsort); for(int i 0;i sz;i) { printf(%s %d\n,arr[i].name,arr[i].age);//对排序后的结构体函数进行输出 } } int main(void) { test2(); return 0; } //通过年龄进行排序 #include stdio.h #include stdlib.h struct stu { char name[10]; int age; }; int cmp_by_age_qsort(const void*p1,const void*p2) { return ((struct stu*)p1)-age-((struct stu*)p2)-age; } void test2() { struct stu arr[] {{zhangsan,20},{wangwu,22},{lisi,18}}; int sz sizeof(arr) / sizeof(arr[0]); qsort(arr,sz,sizeof(arr[0]),cmp_by_age_qsort); for(int i 0;i sz;i) { printf(%s %d\n,arr[i].name,arr[i].age); } } int main(void) { test2(); return 0; }对冒泡排序函数进行改造改造前#include stdio.h void input_arr(int *arr,int sz) { for(int i 0;i sz;i) { scanf(%d,arr[i]); } } void bubble_sort(int *arr,int sz) { for(int i 0;i sz - 1;i) { int flag 1; for(int j 0;j sz - 1 - i;j) { if(arr[j] arr[j 1]) { flag 0; int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } if(flag 1) { break; } } } void print_arr(int *arr,int sz) { for(int i 0;i sz;i) { printf(%-3d,arr[i]); } printf(\n); } int main(void) { int arr[10] {0}; int sz sizeof(arr) / sizeof(arr[0]); input_arr(arr,sz); print_arr(arr,sz); bubble_sort(arr,sz); print_arr(arr,sz); return 0; }改造后对整型数组进行排序#include stdio.h #include string.h #include stdlib.h int cmp_qsort(const void *p1,const void *p2) { return (*(char*)p1-*(char*)p2); } void swap(char*buf1,char*buf2,size_t width) { char tmp 0; for(int i 0;i width;i) { tmp *buf1; *buf1 *buf2; *buf2 tmp; buf1; buf2; } } print_arr(int *arr,int sz) { for(int i 0;i sz;i) { printf(%d,arr[i]); } } void bubble_sotr(void *base,size_t sz,size_t width,int(*cmp)(const void *p1,const void *p2)) { for(int i 0;i sz - 1;i) { for(int j 0;j sz - 1 -i;j) { if(cmp((char*)basewidth*j,(char*)basewidth*(j1))0) swap((char*)basewidth*j,(char*)basewidth*(j1),width); } } } void test() { int arr[10] {9,8,7,6,5,4,3,2,1,0}; int sz sizeof(arr) / sizeof(arr[0]); bubble_sotr(arr,sz,sizeof(arr[0]),cmp_qsort); print_arr(arr,sz); } int main(void) { test(); return 0; }对结构体数据进行排序按照姓名#include stdio.h #include string.h #include stdlib.h struct stu { char name[20]; int age; }; void swap(char*buf1,char*buf2,size_t width) { char tmp 0; for(int i 0;i width;i) { tmp *buf1; *buf1 *buf2; *buf2 tmp; buf1; buf2; } } int cmp_qsort_by_name(const void *p1,const void *p2) { return strcmp(((struct stu*)p1)-name,((struct stu*)p2)-name); } void bubble_sotr(void *base,size_t sz,size_t width,int(*cmp)(const void *p1,const void *p2)) { for(int i 0;i sz - 1;i) { for(int j 0;j sz - 1 -i;j) { if(cmp((char*)basewidth*j,(char*)basewidth*(j1))0) swap((char*)basewidth*j,(char*)basewidth*(j1),width); } } } void test() { struct stu arr[] {{zhangsan,20},{wangwu,36},{lisi,18}}; int sz sizeof(arr) / sizeof(arr[0]); bubble_sotr(arr,sz,sizeof(arr[0]),cmp_qsort_by_name); for(int i 0;i sz;i) { printf(%s %d,arr[i].name,arr[i].age); printf(\n); } } int main(void) { test(); return 0; }