目录

1.函数声明

四个参数:

2.函数使用

1例如:int型数组从小到大排序

2.字符串排序

3.自定义类型排序

3.⭐qsort--冒泡排序模拟



1.函数声明

引入头文件:include<stdlib.h>


void qsort(void *base, size_t num, size_t width, int( *compare)(const void *elem1, const void *elem2));

四个参数:

void *base  参与快排的数据类型

size_t num  数据个数

size_t width  每个数据的大小

int( *compare)(const void *elem1, const void *elem2)   排序方式

2.函数使用

1例如:int型数组从小到大排序

//e1 > e2 : >0
//e1 < e2 : <0
//e1 = e1 : 0
int compare_int (const void *elem1, const void *elem2)
{//强转return *(int *)elem1 - *(int *)elem2;//从大到小取反即可//return -(*(int *)elem1 - *(int *)elem2);
}void main()
{int ar[] = { 48, 34, 556, 77, 98, 222, 34, 25, 56, 45 };int n = sizeof(ar) / sizeof(ar[0]);qsort(ar, n, sizeof(int), compare_int);
}

排序后结果

2.字符串排序

字符串不能相减,所以用字符串比较函数strcmp

char *my_strcmp(const char *str1, const char *str2)
{//检查assert(str1 != NULL && str2 != NULL);int res = 0;while (*str1 != '\0' || *str2 != '\0'){if ((res = (*str1 - *str2)) != 0){break;}str1++;str2++;}return res;
}

排序实现

int compare_str(const void *elem1, const void *elem2)
{return strcmp(*(char **)elem1, *(char **)elem2);
}void main()
{char *str[] = { "jgf", "dfsd", "sFsv", "dFVdfvb", "vssv ", "sfcdv" };n = sizeof(str) / sizeof(str[0]);qsort(str, n, sizeof(char*), compare_str);
}

排序后结果,按照ASICC值排序

3.自定义类型排序

定义结构体类型

struct Student
{char name[100];int age;char sex[3];
};

排序实现

1.需要按照什么方式排序就指向谁

int compare_stu(const void *elem1, const void *elem2)
{//强转return ((struct Student *)elem1)->age - ((struct Student *)elem2)->age;
}
void main()
{struct Student stu [] = { { "小锦鲤", 20, "男" }, { "爬爬", 18, "女" }, { " 猫咪", 11, "女" } };int n = sizeof(stu) / sizeof(stu[0]);qsort(stu, n, sizeof(struct Student), compare_stu);
}

2.结果显示(按年龄排列)

3.按照姓名排列

int compare_stu(const void *elem1, const void *elem2)
{//强转//return ((struct Student *)elem1)->age - ((struct Student *)elem2)->age;return strcmp(((struct Student *) elem1)->name, ((struct Student *) elem2)->name);
}

3.⭐qsort--冒泡排序模拟

//qsort--冒泡排序模拟void swap(char *elem1, char *elem2,size_t width)//交换函数
{for (size_t i = 0; i < width; i++){char temp = elem1[i];elem1[i] = elem2[i];elem2[i] = temp;}
}//满足交换的条件的参数进行交换
int compare(const void *elem1, const void *elem2)
{return (*(char *)elem1 - *(char *)elem2);
}void my_qsort(void *ar, size_t num, size_t width, int(*compare)(const void *elem1, const void *elem2))
{for (size_t i = 0; i < num; i++){for (size_t j = i + 1; j < num; j++){//强转char*   //*((char *)ar +i*width)   *((char *)ar +j*width)if (*((char *)ar + i*width)-*((char *)ar + j*width) > 0)//两个参数交换的条件{swap(((char *)ar + i*width), ((char *)ar + j*width), width);//交换函数}}}}int main()
{int ar[10] = { 2, 33, 45, 12, 334, 56, 78, 33, 11, 23 };int n = sizeof(ar) / sizeof(ar[0]);my_qsort(ar, n, sizeof(int), compare);for (int i = 0; i < n; i++){printf("%d ", ar[i]);}return 0;}

C语言---qsort函数(初步了解)相关推荐

  1. C语言qsort函数的实现

    C语言qsort函数的实现 1.首先阅读文档,查询qsort()函数的使用方法 2.开始实现自己创建的qsort()函数 1.首先阅读文档,查询qsort()函数的使用方法 void qsort (v ...

  2. c语言qsort函数(快速排序)

    c语言qsort函数(快速排序) 在学习c语言时我们常常会遇到一些排序的问题,在遇到这些排序的问题的时候,我们当然可以自己选择写出自己的排序方法来进行排序.但是我们今天要介绍的是c语言库函数中所提供的 ...

  3. C语言qsort()函数

    C语言qsort()函数 #include<stdio.h> #include<stdlib.h> int cmp (const void * a, const void * ...

  4. C语言-qsort函数详解及使用例

    q s o r t ( ) qsort() qsort() 函数是C语言 srdlib.h 库中的排序函数.此函数使用快速排序算法,时间复杂度一般在 O ( l g ( n ) ) O(lg(n)) ...

  5. C语言qsort函数对二维数组排序的不同情况

    内置排序函数--qsort函数 函数说明: 下面博主讲的很清楚,不多介绍. C语言:qsort()解析 对二维数组: 上文博主提到了对二维数组排序时compare函数的写法,但在具体实践中,我们会发现 ...

  6. c语言qsort函数简介,C语言排序函数—qsort函数

    前言: 在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实C语言函数库中就有一个排序函数--qsort函数,使用它可以节省你单独写排 ...

  7. C语言qsort函数的使用详解

    文章目录 一.qsort函数简介 1.函数原型 2.参数含义 3.比较函数详解 二.比较函数使用案例 1.整型数组 2.字符数组 3.double型数组 4.字符串 1.按字符串首字母进行排序 2.按 ...

  8. C语言qsort函数的使用,及自己实现的qsort函数

    目录 一,qsort函数的介绍 二,实例,用qsort函数,实现冒泡排序,把降序改为升序 三,用qsort函数,排序结构体变量 四,自己实现一个qsort函数,用冒泡思维写 1,分析判断两个数据是否需 ...

  9. C语言qsort()函数针对:整型、单个字符、字符串、结构体,超详细讲解(多维度分析举例,小白一看就懂!!!!!)

    目录 一.前言 二.qsort()函数

  10. c语言qsort函数的应用

    qsort函数(全称quicksort).它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n) 功能 对一个数组进行排序(任意类型数组) 函数 ...

最新文章

  1. ECShop 模板库项目功能详解
  2. 一台机器上启动多个tomcat
  3. Java源码解析:深入理解==和equals()
  4. sox+linux查录音格式,linux-使用SOX和sox FAIL格式混合音频:无法打开输入文件`audio_recorded.wav’:WAVE:找不到RIFF标头...
  5. SAP C4C的扩展字段添加到UI之后,还需要额外的步骤,才能将其添加到OData里
  6. PHP基础(必须熟练掌握的基础)
  7. 虚拟化Java应用程序:最佳实践(JavaOne 2011)
  8. [Hands On ML] 8. 降维
  9. 使用Angular2建立项目
  10. C ++基础 | 从 理解C++程序结构 到 编写程序_1
  11. win7开机突然变得很慢_几个步骤教你解决win7旗舰版开机超级慢
  12. Git版本管理及使用规范
  13. VP9编码:迄今的尝试
  14. RAID磁盘阵列与磁盘阵列卡
  15. MySQL创建表和约束条件(四)
  16. echarts甘特图
  17. 【MySQL】听柠檬班公开课后,学习笔记及作业(一)
  18. 常见机器视觉软件OpenCV/Halcon/VisionPro/MIL的区别
  19. iOS - 下拉上拉菜单,万能菜单,适用于各种场合
  20. yuv420格式nv12,nv21,I420,YV12互转

热门文章

  1. Java 的上溯造型和下溯造型以及举例,以及判断参数等指向的类
  2. python字典的常用方法有哪些_python中字典常用方法
  3. bbr是什么?有什么用?如何安装使用?
  4. lr_db_connect mysql_LR连接oracle数据库-lr_db_connect
  5. open、io.open、codecs.open之间的区别?
  6. 二、常见的EDID问题
  7. 用 js判断 一个数是否是素数(质数)_人教版五年级数学下册第2单元质数和合数(P14)图文讲解...
  8. PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡
  9. 网络容易丢包情况汇总
  10. Android.网络连接状态(联网,2g,3g,wifi等)