qsort排序的使用方法

 比较一维数组:

qsort对应使用

qsort(arr, n, sizeof(int), compare);

 

  1. arr: 这是待排序数组的起始地址,即数组的第一个元素的地址。

  2. n: 这是数组中元素的个数,表示排序范围从数组的起始位置到 arr + n - 1 的范围。

  3. sizeof(int): 这是每个数组元素的大小,以字节为单位。在这个例子中,我们假设数组中的元素是整数类型,因此使用 sizeof(int) 表示每个元素占用的字节数。

  4. compare: 这是比较函数,用于告诉 qsort 如何比较两个元素的大小。比较函数应该接受两个指向待比较元素的指针,并返回一个整数表示它们的相对顺序。如果返回负数,表示第一个元素小于第二个元素;如果返回零,表示两个元素相等;如果返回正数,表示第一个元素大于第二个元素。

比较二维数组:

比较二维数组中的某一行:

int compare(const void *a, const void *b) {
    const int *arr1 = *(const int **)a;
    const int *arr2 = *(const int **)b;

    // 这里假设按第一列进行比较
    return (arr1[0] - arr2[0]);
}

 qsort:

qsort(arr_ptr, ROWS, sizeof(int *), compare);
  1. arr_ptr: 这是指向一维数组的指针数组,数组中的每个元素是一个指向一维整数数组的指针。在这个例子中,arr_ptr 中的元素指向二维数组 arr 中的每一行的首地址。

  2. ROWS: 这是数组中元素的个数,即指针数组中有多少个指针。在这个例子中,ROWS 表示二维数组中的行数。

  3. sizeof(int *): 这是每个数组元素(指针)的大小,以字节为单位。在这个例子中,每个元素是指向一维整数数组的指针,所以使用 sizeof(int *) 表示每个元素占用的字节数。

  4. compare: 这是比较函数的指针,用于告诉 qsort 如何比较两个指针指向的一维数组。比较函数中的 (const void *a, const void *b) 参数表示接受指向任意类型的指针,这是为了通用性。在比较函数内部,我们将这些指针转换为指向一维整数数组的指针,并比较它们的内容。

整个二维数组的排序:

int compare(const void *a, const void *b) {
    const int *num1 = (const int *)a;
    const int *num2 = (const int *)b;
    return (*num1 - *num2);
}
qsort(arr, totalElements, sizeof(int), compare);
  1. arr: 这是待排序数组的起始地址,即整个二维数组的起始地址。在这个例子中,arr 是一个指向 int 类型的指针,指向二维数组的第一个元素。

  2. totalElements: 这是待排序数组中元素的总个数。在这个例子中,totalElements 是二维数组中所有元素的个数,即行数乘以列数。

  3. sizeof(int): 这是每个数组元素的大小,以字节为单位。在这个例子中,我们假设数组中的元素是整数类型,因此使用 sizeof(int) 表示每个元素占用的字节数。

  4. compare: 这是比较函数,用于告诉 qsort 如何比较两个元素的大小。比较函数应该接受两个指向待比较元素的指针,并返回一个整数表示它们的相对顺序。如果返回负数,表示第一个元素小于第二个元素;如果返回零,表示两个元素相等;如果返回正数,表示第一个元素大于第二个元素。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值