细讲qsort函数用法

简介: qsort函数是C语言提供一个库函数,主要用于排序各种类型的数据,是一个通用的排序函数,排序内核思想使用的是快速排序
  1. qsort函数介绍
  2. qsort函数使用方法

在这里插入图片描述

前言

可能有一些小伙伴不会使用或者不了解qsort函数的使用,这一期带大家细讲一下qsort函数!


qsort函数介绍

qsort函数是C语言提供一个库函数,主要用于排序各种类型的数据,是一个通用的排序函数,排序内核思想使用的是快速排序。

头文件 - include<stdlib.h>

描述
C 库函数void qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void)) 对数组进行排序

声明

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数

  • base -- 指向要排序的数组的第一个元素的指针。
  • nitems -- 由 base 指向的数组中元素的个数。
  • size -- 数组中每个元素的大小,以字节为单位。
  • compar -- 用来比较两个元素的函数。

返回值
该函数不返回任何值。


qsort函数使用方法

==qsort要求提供一个自己定义的比较函数==
⭐️比如一个整形数组进行排序

int arr[6]={3,2,5,4,1,6};
int cmp_int (const void* e1 , const void* e2)//注意参数形式是固定的
    {    //我们要进行强制类型转换
            int *e1=(int *)e1;
            int *e2=(int *)e2;
            return *e1-*e2;
    }
    qsort(arr,6,sizeof(arr[0]),cmp_int);
        //这里的sizeof(arr[0])也可直接写成4,前提知道是给int型排序

**如果cmp_int返回值小于0(< 0),那么e1所指向元素会被排在e2所指向元素的前面,也就是升序
如果cmp_int返回值等于0(= 0),那么e1所指向元素与e2所指向元素的顺序不确定
如果cmp_int返回值大于0(> 0),那么e1所指向元素会被排在e2所指向元素的后面**

⭐️比如对char类型排序

char arr[6];
int cmp_char(const void* e1 , const void* e2)  //参数格式固定
{
    //强制类型转换
    char* a = (char*)_a;    
    char* b = (char*)_b;
    return *a - *b;  
}

qsort(arr,6,sizeof(arr[0]),cmp_char); 
//同样这里sizeof(arr[0])也可直接写1,因为知道是char类型

⭐️对字符串类型

char arr[40][20];
int cmp_string(const void* e1 , const void* e2)  //参数格式固定
{
    return strcmp(((char*)e1), ((char*)e2));
}

qsort(arr,40,sizeof(arr[0]),cmp_string); 

⭐️对于结构体类型
你要确认根据什么排序,我这里示范就根据名字name进行排序

struct stu
{
        char six[20];
        char name[20];
        int age;    
};
struct stu s[3] = { {"zhangsan", 30},{"lisi", 34},{"wangwu", 20} };
int cmp_name(const void* e1 , const void* e2)  //参数格式固定
{
    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int count=sizeof(s) / sizeof(s[0])
qsort(s, count, sizeof(s[0]), cmp_name);

在这里插入图片描述

相关文章
|
3月前
|
C++
C++(十七)仿函数
### Functor 仿函数简介 Functor(仿函数)是一种通过在类中实现 `operator()` 使其行为像函数的对象。这种方式可以让类拥有更多可定制的功能,同时保持函数般的简洁调用方式。下面展示了如何定义和使用一个计算幂运算的仿函数类,并通过示例说明了其在 `std::sort` 中的优势与灵活性。
|
7月前
|
搜索推荐 C语言
C语言简单实现冒泡函数
C语言简单实现冒泡函数
|
7月前
|
安全 编译器 程序员
【C++ 泛型编程 进阶篇】C++ 可变参数模板的妙用:解决参数不足问题
【C++ 泛型编程 进阶篇】C++ 可变参数模板的妙用:解决参数不足问题
347 0
|
7月前
|
搜索推荐 C语言 索引
【C语言】剖析qsort函数的实现原理
【C语言】剖析qsort函数的实现原理
82 0
|
编译器 C语言
【C语言】指针的进阶(二)—— 回调函数的讲解以及qsort函数的使用方式
【C语言】指针的进阶(二)—— 回调函数的讲解以及qsort函数的使用方式
32 0
|
C语言
【C语言】函数重难点之函数递归
【C语言】函数重难点之函数递归
73 0
|
编译器 C语言
C语言之回调函数,qsort函数的定义及使用方法
C语言之回调函数,qsort函数的定义及使用方法
|
存储 C语言 C++
【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数
【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数
|
算法 C语言
【C语言进阶篇】回调函数都学了吧!那么用冒泡排序实现qsort函数你会嘛?
【C语言进阶篇】回调函数都学了吧!那么用冒泡排序实现qsort函数你会嘛?
87 0
|
算法 程序员 C语言
【C初阶】第四篇——函数(库函数+自定义函数+函数递归)
【C初阶】第四篇——函数(库函数+自定义函数+函数递归)
【C初阶】第四篇——函数(库函数+自定义函数+函数递归)