模拟实现qsort函数(冒泡排序版本) | 乐文库-ag九游会登录j9入口
作者:~小明学编程
文章专栏:c语言基础知识
目之所及皆为回忆,心之所想皆为过往
今天给大家介绍c语言中一个比较好用的函数qsort函数以及我们模拟实现qsort函数的过程。
目录
qsort函数
作用
参数
用法
模拟实现qsort函数
qsort函数
这里是qsort函数的介绍,在这里简单的给大家翻译介绍一下
作用
首先最上面说到它的作用,执行一个快速排序,qsort函数是一个排序函数,它的底层排序算法是快速排序。
参数
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
接着就是它的返回值和参数,我们可以看到这长长的一串,看着就头疼,不过也没大家想象的那么复杂,给大家介绍一下大家就明白了。
首先看我们的第一个参数base,就是一个我们待排序的数组,接着就是num,顾名思义就是我们数组元素的的大小,待排序元素的个数,然后就是width参数,也就是我们待排元素中每个元素的大小,最后就是int (__cdecl *compare )(const void *elem1, const void *elem2 )这是一个回调函数,其中compare是一个函数指针,函数的两个参数分别是elem1和elem2(类型是void*)返回值是int类型,最后qsort的返回类型是void型。
用法
下面就给大家介绍一下qsot函数的用法
//整数的比较int cmp1(const void* e1, const void* e2){return *((int*)e1) - *((int*)e2);}//测试整数void test1(){int arr[5] = { 5,4,3,2,1 };int sz = sizeof(arr) / sizeof(arr[0]);my_qsort(arr, sz, sizeof(arr[0]), cmp1);for (int i = 0; i 这个比较函数是需要我们自己去设计的,根据我们所比较的类型不同我们可以设计不同的比较函数
//浮点数的比较int cmp2(const void* e1, const void* e2){return *((double*)e1) - *((double*)e2);}//字符的比较int cmp3(const void* e1, const void* e2){return *((char*)e1) - *((char*)e2);}//字符串的比较int cmp4(const void* e1, const void* e2){return strcmp(*(char**)e1, *(char**)e2);}//结构体数字比较int cmp5(const void* e1, const void* e2){return ((struct stu*)e1)->age - ((struct stu*)e2)->age;}//结构体字符串比较int cmp6(const void* e1, const void* e2){return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);}
下面是我们对一个整数数组的排序
模拟实现qsort函数
//模拟实现qsort函数void swap(char* ch1, char* ch2, int sz){for (int i = 0; i
其中我们判断大小之后要进行一个交换,交换的过程我们采用的是逐个字节进行交换,也就是我们的swap函数所实现的功能。
下面是我们对各种类型的比较
#include#include#includestruct stu{int age;char name[20];};//整数的比较int cmp1(const void* e1, const void* e2){return *((int*)e1)-*((int*)e2);}//浮点数的比较int cmp2(const void* e1, const void* e2){return *((double*)e1) - *((double*)e2);}//字符的比较int cmp3(const void* e1, const void* e2){return *((char*)e1) - *((char*)e2);}//字符串的比较int cmp4(const void* e1, const void* e2){return strcmp(*(char**)e1, *(char**)e2);}//结构体数字比较int cmp5(const void* e1, const void* e2){return ((struct stu*)e1)->age - ((struct stu*)e2)->age;}//结构体字符串比较int cmp6(const void* e1, const void* e2){return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);}//模拟实现qsort函数void swap(char* ch1, char* ch2, int sz){for (int i = 0; i
本文来自网络,不代表乐文库立场,如若转载,请注明出处:https://www.lewenku.com/?p=482453