《由浅到深使用回调函数 2》(快速排序)


上一节中讲了快速排序,这一节回忆一下快速排序吧!

理解标准库中快速排序怎么用的

头文件:

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

标准快排API:

void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));
base参数是需要排序的元素首地址
nmemb参数是排序的个数
size是每个元素占得尺寸
最后一个参数是指排序的方法就是我们要实现的函数指针
下面两个测试:第一个测试对字符串排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int cmp(const void *p1, const void *p2)
{

   return strcmp(* (char * const *) p1, * (char * const *) p2);
}

int main(int argc, char *argv[])
{

   int j;

   if (argc < 2) {
    fprintf(stderr, "Usage: %s error\n", argv[0]);
    return -1;
   }


   qsort(&argv[1], argc - 1, sizeof(char *), cmp);

   for (j = 1; j < argc; j++)
       puts(argv[j]);

   return 0;

输入 ./aout a d c b

打印 a b c d

第二个对结构体进行排序:(测试函数中是由年龄排序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Admin
{
    int age;
    char name[12];
}AD;

int cmp(const void *a,const void *b)
{
     AD *c = (AD *)a;
     AD *d = (AD *)b;
    return  (((c->age)>(d->age))?1:-1);
}


int main(int argc, char *argv[])
{
    int j = 0;

    /*
    ** 在这里简单的用结构体数组来排序,在项目中更多的是对链表排序
    */
    AD xiaohua = {20,"xiaohua"};
    AD xiaoming = {22,"xiaoli"};
    AD xiaohu = {18,"xiaohu"};

    AD test[3] = {xiaohua,xiaoming,xiaohu};

   qsort(&test[0], 3, sizeof(AD), cmp);

    /*
    ** 打印由年龄从小到大排序后的排名
    */
   for (j = 0; j < 3; j++)
       puts(test[j].name);

   return 0;

}

打印结果无误

xiaohu
xiaohua
xiaoli
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小白鱼儿_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值