上一节中讲了快速排序,这一节回忆一下快速排序吧!
理解标准库中快速排序怎么用的
头文件:
#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