C语言备忘录——qsort
2020-12-13 16:22
标签:生活 lse 方式 oid 类型 imp time data crt 写了这么久的排序感觉还是用现成的最舒服。其实C语言其实自己带了一个快速排序在stdlib 库里,但是其函数调用的接口过于复杂,所以让人望而却步。为了加深自己的记忆,所以写下这篇博客 先来看一下函数原型 看上去就很复杂 其实 CRTIMP仅仅是一个宏定义(不明白也没啥) C -- C语言 部用减法,怕数据溢出。 二、Char型比较 三、浮点型比较 四、结构体比较 五、对结构体二级排序 六、对字符串进行排序 生活不易,诸君共勉 C语言备忘录——qsort 标签:生活 lse 方式 oid 类型 imp time data crt 原文地址:https://www.cnblogs.com/daker-code/p/11619299.html_CRTIMP void __cdecl qsort(void*, size_t, size_t, int (*)(const void*, const void*))
其实际意义如下
R -- run 运行
TIM -- time 时侯
P -- 参数 __cdecl 也是个系统预定义的宏。(好像是支持,不定参数输入,例如printf,在这里应该不是这个意思,感兴趣的自行度娘)。
void 返回 NULL,qsort函数名。
括号里:
第一个参数是代表任意数据类型的首地址;
第二个参数是代表任意数据类型的所用空间,即长度;
第三个参数是代表数据类型的大小;
第四个参数是排序方式,最麻烦的就在这里了,我们得写一个比较函数cmp()。返回 1 从小到大,返回-1,从大到小
理论不讲太多,直接看如何使用:
一:整数比较int num[100];
int cmp ( const void *a , const void *b )
{
return *(int *)a > *(int *)b ? 1 : -1;
}
qsort(num,100,sizeof(num[0]),cmp);
1 char word[100];
2
3 int cmp( const void *a , const void *b )
4 {
5 return *(char *)a > *(char *)b 1 ? -1;
6 }
7
8 qsort(word,100,sizeof(word[0]),cmp);
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp);
typedef double ElemtType
struct In
{
ElemtTypedata;
int other;
}s[100];
int cmp( const void *a ,const void *b)
{
return (*(struct In *)a).data > (*(struct In *)b).data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);
struct In
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int cmp( const void *a , const void *b )
{
struct In *c = (struct In *)a;
struct In *d = (struct In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp);
struct In
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(struct In *)a)->str , (*(struct In *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);