【C语言】“qsort函数详解”与“使用冒泡思想模拟使用qsort”

您所在的位置:网站首页 c语言中sort函数 【C语言】“qsort函数详解”与“使用冒泡思想模拟使用qsort”

【C语言】“qsort函数详解”与“使用冒泡思想模拟使用qsort”

2023-11-08 08:43| 来源: 网络整理| 查看: 265

✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨

文章目录 ✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ qsort的介绍:一、qsort函数的使用✨比较int类型数据比较字符型数据比较结构体数据 冒泡思想模拟实现qsort函数完结

qsort的介绍: qsort ()函数是 C 库中实现的快速排序算法,包含在 stdlib.h 头文件中此函数需要四个参数void qsort(void* *base, size_t nitems, size_t size, int (compar)(const void * , const void)) char* base —— 指向要排序的数组首元素地址的指针size_t nitems —— 要排序数组的元素个数size_t size —— 数组每个元素大的小 (有非常重要的作用)int compar(const void *,const void *) —— 由使用者提供的一个比较两个元素的函数 有两个参数,如果参数1大于参数2返回>0的数参数1等于参数2返回0参数1小于参数2返回0的数,参数1等于参数2返回0,参数1小于参数2返回 int arr[10] = { 4,3,5,6,7,8,1,2,9,0 }; int sz = sizeof(arr) / sizeof(arr[0]); int width = sizeof(arr[0]); qsort(arr, sz, width, cmp_int); for (int i = 0; i return *(char*)str1 - *(char*)str2; } int main() { char str[10] = { 'g','c','b','d','f','e','a' }; int len = strlen(str); int width2 = sizeof(str[0]); qsort(str, len, width2, cmp_char); printf("%s", str); //abcdefg printf("\n"); } 比较结构体数据 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include struct a { char name[10]; int age; }; int cmp_stru_a_name(const void * arr3,const void *arr4) //按照name排序比较方法 { return strcmp(((struct a*)arr3)->name ,((struct a*)arr4)->name); } int cmp_stru_a_age(const void* arr1, const void* arr2) //按照age排序比较方法 { return ((struct a*)arr1)->age - ((struct a*)arr2)->age; } int main() { struct a arr2[] = { {"baobao",2} ,{"aoligei",4}{"caomei",3}}; int sz2 = sizeof(arr2)/sizeof(arr2[0]); int width3 = sizeof(arr2[0]); qsort(arr2, sz2, width3, cmp_stru_a_name); //按照结构体中name排序 for (int i = 0; i printf("%s ", arr2[i].name); printf("%d ", arr2[i].age); } //baobao 2 caomei 3 aoligei 4 } 冒泡思想模拟实现qsort函数

qsort底层使用的是快速排序,我们使用冒泡排序思想模拟实现效果与qsort相同的函数

冒泡排序:每次把最大的一个数字交换到最后面

void swap(char* arr1, char* arr2,int width) { for (int i = 0; i return *(int*)arr1 - *(int*)arr2; } void bubble_sort(void *base,size_t sz,size_t width,int (*cmp)(const void*,const void*)) { for (int i = 0; i if (cmp((char*)base+j*width,(char*)base+(j+1)*width)>0) //由于设计bubble_sort函数的时候我们还不知道使用者想比较什么类型的数据,所有可以把base强制转换成字符型指针再乘上元素宽度进行比较,使得无论传入的是什么类型的数据都可以比较。 { swap((char*)base+j*width,(char*)base+(j+1)*width,width); //使用swap交换的时候也是如此,我们设计bubble_sort函数的时候不知道要对多少个字节进行交换,所以用把base强转成char*和宽度一起传入swap中,一个字节一个字节的进行交换 ------ ## } } } } int main() { int arr[10] = { 3,1,2,4,5,9,7,6,8,0 }; int sz = sizeof(arr) / sizeof(arr[0]); int width = sizeof(arr[0]); bubble_sort(arr, sz, width, cmp_int); for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3