qsort详解

最近在研究快速排序,发现C语言标准库中有一个快速排序的函数qsort。

原型:

#include <stdlib.h>

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

描述:

  • qsort函数的作用是将包含有nmemb个size大小的元素的数组进行排序。
  • 参数base就是数组的起始地址。
  • 参数nmemb是指数组中元素的个数。
  • 参数size是值数组中元素的大小。
  • 排序的顺序是有函数指针compar来指定的。compar所指定的函数中,如果要升序排序的话,第一参数大于第二参数返回大于0的值,第一个参数小于第二个参数返回小于0的值。如果要降序排序的话,就反过来,第一参数大于第二参数返回小于0的值,第一个参数小于第二个参数返回大于0的值。

注意:

  • 如果两个元素相等,那么他们在排序后的数组中的位置是不确定的。
  • 在cmp中函数中,尽量不要用减法,因为有可能会溢出,最好用比较运算。

=====================================================================================================

一些比较典型的compare函数:

  • int型数组
int arr[100];
int cmp(const void *a, const void *b)
{
    return *(int *)a > *(int *)b ? 1 : -1;
}
qsort(arr, 100, sizeof(arr[0]), cmp);
  • double型数组
double arr[100];
int cmp( const void *a ,  const void *b )
{
    return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(arr,100,sizeof(arr[0]),cmp);

  • 字符数组(字符串)
char str[100];
int cmp(const void *a, const void *b)
{
    return strcmp(*(char *)a, *(char *)b);
}
qsort(str, 100, sizeof(str[0]), cmp);
  • 结构体的排序
struct _Date
{
    double data;
    int other;
}a[100];
typedef struct _Date Date;
//按照data的值从小到大将结构体排序
int cmp( const void *a ,const void *b)
{
    return (*(Date *)a).data > (*(Date *)b).data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值