C++快速排序qsort函数介绍及其使用方法 您所在的位置:网站首页 c++降序 C++快速排序qsort函数介绍及其使用方法

C++快速排序qsort函数介绍及其使用方法

2023-04-06 12:08| 来源: 网络整理| 查看: 265

qsort函数介绍

qsort函数介绍:

image.png 在使用该函数时,我们要清楚这几点:

1.该函数无返回值,其头文件为#include;

2.其四个函数参数分别为:待排序数据中第一个对象的地址,排序数据元素个数,排序数据中每个元素大小,单位为字节,用来比较待排序数据中两个数据的函数;

3.比较函数的返回值必须为int,其参数类型为void类型的指针;

3.qsort函数可用于任何数据类型的排序。 接下来我会举几个例子,让我们更加清楚这个函数的使用。

例一:整型数据的排序

实例代码:

//qsort:快速排序函数--整型数据 #define _CRT_SECURE_NO_WARNINGS #include //printf #include //qsort int cmp_int(const void* a, const void* b) //比较整型数据 //存放的将要进行比较的两个函数的地址 { return (*((int*)a) - *((int*)b)); //(int*)a:强制类型转换为整型指针 //升序排列(从小到大) //如果a大于b,则返回1;如果a小于b,则返回-1;若相等,则返回0 //return *((int*)b) - *((int*)a); //降序排列(从大到小) } int main() { int arr[] = { 40,10,100,90,20,25 }; int sz = sizeof(arr) / sizeof(arr[0]); int n = 0; qsort(arr, sz, sizeof(int), cmp_int); //qsort(数组名,数组内元素个数,数组内每个元素的大小,比较调用) for (n = 0; n < sz ; n++) //打印数组内的元素 { printf("%d ", arr[n]); } return 0; } 复制代码

输出结果(升序):

image.png 输出结果(降序):

image.png

例二:字符数据的排序

实例代码:

#define _CRT_SECURE_NO_WARNINGS #include //printf #include //qsort #include //strlen int cmp_char(const void* a, const void* b) //比较整型数据 //存放的将要进行比较的两个函数的地址 { return *(char*)a - *(char*)b; //(char*)a:强制类型转换为字符指针 //升序排列(从小到大) //如果a的ASCLL值大于b,则返回1; //如果a的ASCLL值小于b,则返回-1; //若相等,则返回0 //return *(char*)b - *(char*)a; //降序排列(从大到小) } int main() { char arr[] = { 'b','d','c','f','q','o','p' ,'\0'}; //字符数组排序 int len = strlen(arr); printf("len=%d\n", len); //字符数组内字符个数 int n = 0; qsort(arr, len, sizeof(char), cmp_char); //qsort(数组名,数组内元素个数,数组内每个元素的大小,比较调用) for (n = 0; n < len; n++) //打印字符数组中的元素 { printf("%c ", arr[n]); } return 0; } 复制代码

输出结果(升序):

image.png

输出结果(降序):

image.png

例三:结构体数据的排序

实例代码:

1:按年龄排序 #define _CRT_SECURE_NO_WARNINGS #include //printf #include //qsort typedef struct Student { char name[50]; //姓名 int age; //年龄 }S; int com_by_age(const void* a, const void* b) { return ((S*)a)->age - ((S*)b)->age; //升序 //按年龄大小排序 //return ((S*)b)->age - ((S*)a)->age; //降序 } int main() { S s[] = { {"zhangsan",18},{"lisi",21},{"wangwu",20},{"liuqi",17} }; //按年龄大小排序 int n = 0; int sz = sizeof(s) / sizeof(s[0]); //数据的个数 qsort(s, sz, sizeof(s[0]), com_by_age); for (n = 0; n < sz; n++) //打印结果 { printf("%s %d\n", s[n].name, s[n].age); } return 0; } 复制代码

输出结果(升序):

image.png 输出结果(降序):

image.png

2:按名字(ASCLL)排序

按名字排序跟strcmp函数一个道理,如果你忘了strcmp的功能是什么的话,可以点击strcmp查看。

#define _CRT_SECURE_NO_WARNINGS #include //printf #include //qsort #include //strcmp typedef struct Student { char name[50]; //姓名 int age; //年龄 }S; int com_by_name(const void* a, const void* b) { return strcmp(((S*)a)->name , ((S*)b)->name); //升序 //a>b,返回一个正数;aname , ((S*)a)->name); //降序 } int main() { S s[] = { {"zhangsan",18},{"lisi",21},{"wangwu",20},{"liuqi",17} }; //按名字排序 int n = 0; int sz = sizeof(s) / sizeof(s[0]); //数据的个数 qsort(s, sz, sizeof(s[0]), com_by_name); //按名字排序 for (n = 0; n < sz; n++) //打印结果 { printf("%s %d\n", s[n].name, s[n].age); } return 0; } } 复制代码

输出结果(升序):

image.png

输出结果(降序):

image.png

本篇内容到这里就结束了,如果你觉得多少对你有点帮助的话,可以点赞或者收藏支持一波,欢迎大佬在评论区批评指正,我们下次再见!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有