qsort函数
全称:
quicksort
头文件:
#include<stdlib.h>
用法:
void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
参数:
1 待排序数组,排序之后的结果仍放在这个数组中
2 数组中待排序元素数量
3 各元素的占用空间大小(单位为字节)
4 指向函数的指针,用于确定排序的顺序(需要用户自定义一个比较函数)
比较函数:
int cmp(const void *a, const void *b)
函数中有两个元素作为参数(参数的格式不能变),返回一个int值,比较函数cmp的作用就是给qsort指明元素的大小是怎么比较的。
qsort中几种常见的比较函数
一、对int型数组排序
int num[100];
int cmp_int(const void* _a , const void* _b) //参数格式固定
{
int* a = (int*)_a; //强制类型转换
int* b = (int*)_b;
return *a - *b; //升序排序是*a-*b 降序排序是*b-*a
}
qsort(num,100,sizeof(num[0]),cmp_int);
二、对char型数组排序(同int类型)
char word[100];
int cmp_char(const void* _a , const void* _b) //参数格式固定
{
char* a = (char*)_a; //强制类型转换
char* b = (char*)_b;
return *a - *b;
}
qsort(word,100,sizeof(word[0]),cmp_char);
三、对字符串进行排序
char word[100][10];
int cmp_string(const void* _a , const void* _b) //参数格式固定
{
char* a = (char*)_a; //强制类型转换
char* b = (char*)_b;
return strcmp(a,b);
}
qsort(word,100,sizeof(word[0]),cmp_string);
四、对结构体进行排序
struct node{
int t;
int w;
int y;
};
int cmp(const void *a,const void *b){
struct node *c = (node *)a;
struct node *d = (node *)b;
if(c->t!= d->t) return c->t-d->t;
else return c->w-d->w;
}