qsort简介
首先说一下,qsort是编译器函数库自带的快速排序函数。下面我重点说一下它的用法函数参数和用法。
函数原型:
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
函数参数:
1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。
比如:对一个长为10的数组进行排序时,int a[10]; 那么base应为a,num应为 10,width应为 sizeof(int),comp函数随自己的命名。
qsort应用
使用qsort一个整形数组、浮点型数组、字符串数组。
这个问题就是考验对qsort中的几个参数的应用,重点还是那个函数指针,关于这一点,在上一篇文章,我已经说过了,这里不再做过多的重复,那么我们就从这个问题本身出发进一步了解qsort的用法吧!
//使用qsort一个整形数组、浮点型数组、字符串数组。
int cmp_int(const void * a,const void * b)
{
return *(int *)a - *(int *)b;
}
int cmp_double(const void * a,const void * b)
{
return *(double*)a > *(double*)b ? 1 : -1;
}
int cmp_string(const void * a,const void * b)
{
return strcmp(* (char * *)a,*(char * *)b);
}
int main()
{
int i=0;
int num[]={12,32,65,54,12,15,658,5621,34,0};
double dou[]={12.3,32.36,65.548,54.210,12.125,15.478,658.1,5621.2,34.3,0.456};
char *str[]={"enter","number","size","begin","of","cat","case","program","certain","a"};
qsort(num,10,sizeof(num[0]),cmp_int);
qsort(dou,10,sizeof(dou[0]),cmp_double);
qsort(str,10,sizeof(str[0]),cmp_string);
for(i=0;i<10;i++)
{
printf("%d ",num[i]);
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%lf ",dou[i]);
if(i==4)
{
printf("\n");
}
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%s ",str[i]);
}
printf("\n");
return 0;
}