qsort 函数包含在 stdlib.h 中
所以C就这点来看还是不错滴^_^,当然貌似c++里的sort更简单。。。
使用方法:void qsort(void *base , num , width , cmp);
参数含义如下:
base:需要排序的目标数组的开始地址。
num:需要排序的数据的个数。
width:数组中每个元素的长度。
cmp:这个还得自己写。。微麻烦。。
1、对int类型数据排序。
int num[100];
int cmp(const void *a,const void *b)
{
//参数列表中是两个空指针,需要去指向你的数组元素。所以转型成为当前数据的类型,然后取值。
return *(int *)a - *(int *)b; //升序
或:
return *(int *)b - *(int *)a; //降序
}
qsort(num,100,sizeof(num[0]),cmp);
2、对char类型数组排序。
char word[100];
int cmp(const void *a, const void *b)
{
return *(char *)a - *(char *)b; //升序
或:
return *(char *)b - *(char *)a; //降序
}
qsort(word,100,sizeof(word[0]),cmp);
对char型数据的排序与int型基本相同。
3、对double类型数据排序。
double num[100];
int cmp(const void *a, const void *b)
{
return *(double *)a > *(double *)b ? 1:-1; //升序
//注意返回值的问题。显然cmp返回的是一个整型,所以为了避免double返回小数而导致错误,所以进行一下判断。
或:
return *(double *)b > *(double *)a ? 1:-1; //降序
}
qsort(num,100,sizeof(num[0]),cmp);
4、对字符串按字典序排序。
char words[100][100];
int cmp
{
return strcmp((char *)a , (char *)b); //升序,其中使用strcmp需要包含<string.h>文件
或:
return strcmp((char *)b , (char *)a); //降序
}
qsort(words,100,sizeof(words[0]),cmp);