博客
关于我
C语言 qsort函数
阅读量:74 次
发布时间:2019-02-26

本文共 2042 字,大约阅读时间需要 6 分钟。

qsort 是 C 编程语言中一个重要的标准库函数,用于对数组进行排序。它的函数原型为:

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

该函数用于对 base 所指的数组进行排序。qsort 函数定义在标准库文件 <stdlib.h> 中。

函数参数说明

  • base:指向要排序数组的第一个元素的指针。
  • nitems:数组中元素的总数。
  • size:数组中每个元素的大小(以字节为单位)。
  • compar:比较两个元素的回调函数,用于定义排序的逻辑。
  • 回调函数说明

    回调函数是通过函数指针调用的一种方式。当将函数指针传递给其他函数时,调用目标函数即为回调函数。qsort 函数使用的比较函数的原型为:

    int compar(const void *p1, const void *p2);

    比较函数返回值的含义如下:

    • 返回值小于 0 时,表示 p1 所指的元素应放于 p2 所指元素的左侧;
    • 返回值等于 0 时,表示两个元素的相对顺序不影响排序结果;
    • 返回值大于 0 时,表示 p1 所指的元素应放于 p2 所指元素的右侧。

    应用示例

    以下是一些常见的 qsort 应用场景及其代码示例:

  • 对一维数组排序
  • #include 
    #include
    int comp(const void *a, const void *b) {
    return *(int *)a - *(int *)b;
    }
    int main() {
    int n;
    scanf("%d", &n);
    int *array = malloc(n * sizeof(int));
    for (int i = 0; i < n; i++) {
    scanf("%d", &array[i]);
    }
    qsort(array, n, sizeof(int), comp);
    for (int i = 0; i < n; i++) {
    printf("%d ", array[i]);
    }
    free(array);
    return 0;
    }
    1. 对二维数组排序
    2. // 假设有一个二维数组 a[1000][2]
      int comp(const void *a, const void *b) {
      return ((int *)a)[0] - ((int *)b)[0];
      }
      qsort(a, 1000, sizeof(int) * 2, comp);
      1. 对字符串排序
      2. char a[MAX][MAX];
        // 假设 initial(a) 是初始化函数,lenth 是数组长度
        qsort(a, lenth, sizeof(a[0]), Comp);
        1. 按结构体关键字排序
        2. struct Node {
          double data;
          int other;
          };
          int comp(const void *p1, const void *p2) {
          return ((Node *)p2)->data > ((Node *)p1)->data ? 1 : -1;
          }
          qsort(s, 100, sizeof(s[0]), comp);
          1. 按多个关键字排序(以二维为例)
          2. struct Node {
            int x;
            int y;
            };
            int comp(const void *p1, const void *p2) {
            struct Node *c = (Node *)p1;
            struct Node *d = (Node *)p2;
            if (c->x != d->x) {
            return c->x - d->x;
            } else {
            return d->y - c->y;
            }
            }
            qsort(s, 100, sizeof(s[0]), comp);
            1. 按结构体字符串排序
            2. struct Node {
              int data;
              char str[100];
              };
              int comp(const void *p1, const void *p2) {
              return strcmp(((Node *)p1)->str, ((Node *)p2)->str);
              }
              qsort(s, 100, sizeof(s[0]), comp);

              这些示例展示了 qsort 在不同场景下的应用,既可以对简单数据进行排序,也可以对复杂数据结构进行高级排序。通过提供一个定制的比较函数,开发者可以根据具体需求对数据进行定制化排序。

    转载地址:http://oxuk.baihongyu.com/

    你可能感兴趣的文章
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>