C语言中qsort函数的介绍与用法实例

C语言中qsort函数的介绍与用法实例

什么是qsort函数?

在C语言中,qsort函数是用于对数组进行排序的函数。它被定义在stdlib.h中,具有如下形式:

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

其中参数含义如下:

  • base: 待排序数组的指针,指向数组的首地址。
  • nmem: 数组元素的个数。
  • size: 数组元素的大小(字节数)。
  • compar: 用于比较数组元素大小的函数指针。

使用步骤

  1. 定义一个待排序的数组,确定元素个数和元素类型。
  2. 定义一个比较函数。
  3. 调用qsort()函数进行排序。

一个简单的示例

下面是一个简单的示例,其中我们使用qsort()函数对一个由字符串组成的数组进行排序,按字典序从小到大排序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(const void *a, const void *b) {
    return strcmp(*(const char **)a, *(const char **)b);
}

int main() {
    const int N = 5;
    const char *arr[N] = {"apple", "banana", "pear", "orange", "grape"};
    qsort(arr, N, sizeof(char *), compare);
    for (int i = 0; i < N; i++) {
        printf("%s ", arr[i]);
    }
    printf("\n");
    return 0;
}

输出结果为:

apple banana grape orange pear

另一个示例

下面是另一个示例,其中我们使用qsort()函数对一个由结构体组成的数组进行排序。

#include <stdio.h>
#include <stdlib.h>

struct Student {
    char name[50];
    int age;
    float score;
};

int compare(const void *a, const void *b) {
    const struct Student *p = (const struct Student *)a;
    const struct Student *q = (const struct Student *)b;
    if (p->score != q->score) {
        return q->score - p->score;
    } else if (p->age != q->age) {
        return p->age - q->age;
    } else {
        return strcmp(p->name, q->name);
    }
}

int main() {
    const int N = 3;
    struct Student arr[N] = {
        {"Tom", 20, 80.5},
        {"Mary", 21, 89.0},
        {"John", 20, 80.5}
    };
    qsort(arr, N, sizeof(struct Student), compare);
    for (int i = 0; i < N; i++) {
        printf("%s %d %f\n", arr[i].name, arr[i].age, arr[i].score);
    }
    return 0;
}

输出结果为:

Mary 21 89.000000
John 20 80.500000
Tom 20 80.500000

在这个例子中,我们首先定义了一个名为Student的结构体,包含名称、年龄和分数三个成员。我们然后定义一个包含三个Student结构体的数组,并按分数从高到低、年龄从小到大、名称从小到大的顺序排列。我们可以使用qsort()函数将其实现,通过定义一个以两个结构体作为参数并返回整数的比较函数,来指定元素的顺序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中qsort函数的介绍与用法实例 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++中const的实现机制深入分析

    C++中const的实现机制深入分析 在C++中,常量(constant)是指值无法改变的变量。常量在程序中有很重要的作用,例如在函数中传递参数时,可以使用常量来确保参数不被修改。在C++中,我们可以使用关键字const来定义常量。但是,const并不是简单的关键字,其实现机制比较复杂。本文将深入分析C++中const的实现机制以及使用常量的注意事项,并提供…

    C 2023年5月23日
    00
  • Maplesoft Maple 2019安装许可激活+Update升级教程图文详解(附下载)

    下面我将详细讲解“Maplesoft Maple 2019安装许可激活+Update升级教程图文详解(附下载)”的完整攻略。 Maplesoft Maple 2019安装许可激活+Update升级教程图文详解(附下载) Maplesoft Maple 2019是一款非常优秀的数学软件,在数学建模、图像绘制、符号计算等方面具有非常出色的表现。本文将为大家详细介…

    C 2023年5月22日
    00
  • Python如何处理JSON数据详解

    Python处理JSON数据是很常见的操作,下面将详细讲解如何处理JSON数据。 一、什么是JSON格式 JSON(JavaScript Object Notation)是一种数据格式,它是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成,目前广泛应用于Web应用程序中。 JSON的格式具有以下特点: 轻量级:相比XML格式,JSON格…

    C 2023年5月23日
    00
  • 详解JavaScript中数组的一些特殊用法

    详解JavaScript中数组的一些特殊用法 数组是JavaScript中最重要的数据类型之一,其具有存储一组有序数据的能力。常见的操作包括遍历、添加、删除、排序、查找等。而除此之外,数组还有一些特殊的用法,可以让我们更好地处理数据或进行编程。 数组去重 数组去重是数组操作中的一个常见需求,我们可以使用ES6中的Set来实现简单的去重。 const arr …

    C 2023年5月22日
    00
  • C++实现教职工信息管理系统

    C++实现教职工信息管理系统攻略 1. 确定需求 在开始编写代码之前,我们需要确定该教职工信息管理系统的需求,包括需要实现哪些功能、输入输出的格式等。 该系统需要实现的功能包括: 添加教职工信息 删除教职工信息 修改教职工信息 查询教职工信息 显示所有教职工信息 教职工信息需要包括: 姓名 工号 职称 部门 输入格式为: 添加教职工信息:姓名 工号 职称 部…

    C 2023年5月23日
    00
  • Qt控件点击消息获取的方法详解

    Qt控件点击消息获取的方法详解 简介 在Qt中,获取控件点击消息是一个比较常见的需求,这篇攻略将会介绍如何在不同的控件类型中获取点击消息,并且提供一些实例代码来帮助大家更好地理解。 QPushButton控件 QPushButton是用于响应用户点击事件的控件,可以通过它的clicked信号来获取点击事件。 示例代码: void on_pushButton_…

    C 2023年5月23日
    00
  • C++堆栈类模板实现代码

    C++中的堆栈类是一种常用的数据结构,可以实现后进先出(LIFO)的数据存储和处理方式。 下面是一个C++堆栈类模板的实现代码攻略,主要包括以下几个方面: 堆栈类模板的定义和实现 堆栈类模板由两个部分组成:头文件(.h文件)和源文件(.cpp文件)。 头文件中需要包含以下内容: 头文件保护宏定义,避免重复引用。 类定义,定义堆栈类模板及其成员函数。 类成员,…

    C 2023年5月24日
    00
  • C++内存分区模型超详细讲解

    C++内存分区模型超详细讲解 什么是内存分区模型 内存分区模型是指操作系统在运行程序时将可用的内存分为多个区域,每个区域有不同的作用和管理方式。在C++程序运行时,系统会按照一定的规则将内存分成以下几个区域: 栈区 堆区 全局/静态区 常量区 代码区 各区域的详解 栈区 栈(Stack)是一段连续的内存空间,由编译器自动管理。栈区内的数据大小和生命周期是可以…

    C 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部