C /C++库函数 之 qsort的用法
qsort 对 int 型的排序~~~
注意调用 和自定义compare
#include<stdio.h>
#include<stdlib.h> // 调用的库函数
int compare(const void *a,const void *b); //函数的定义:定义一个比较函数~~ 这是判断函数排序的方法
int main()
{
int i;
int a[10]={1,2,3,2,4,5,2,1,3,0};
qsort(a,10,sizeof(a[1]),compare);
for(i=0;i<=9;i++)
printf("%d ",a[i]); // 排序好后 关键是在于输出 可以从头输出 从尾输出
system("pause");
}
int compare(const void *a,const void *b)
{
return *(int *)a-*(int *)b; //这是有小到大的输出
}
// return *(int *)b-*(int *)a; 这是由大到小的输出
输出的结果是:
0 1 1 2 2 2 3 3 4 5
qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) )
其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。
比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。
qsort(a,1000,sizeof(int ),comp);
其中comp函数应写为:
int comp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
下面这是对float的 qsort的排序~~
#include<stdio.h>
#include<stdlib.h>
int compare(const void *a,const void *b);
int main()
{
int i,j;
float a[10]={1.1,2.1,3.2,1.4,2.9,4.2,5.3,2.2,1.7,3.2};
qsort(a,10,sizeof(a[1]),compare);
for(i=0;i<=9;i++)
{
printf("%f ",a[i]);
}
printf("\n");
system("pause");
}
int compare(const void *a,const void *b)
{
return (*(float*)a-*(float*)b>0?1:-1); //这是将浮点型转化为整形。
}
// char 型的函数 排序
#include<stdio.h>
#include<stdlib.h> // 调用的库函数 qsort
#include<string.h> // 调用的库函数 strcmp
int compare(const void *a,const void *b); //函数的定义:定义一个比较函数~~ 这是判断函数排序的方法
int main()
{
int i,j;
char a[10]={'m','n','s','a','q','f','g','h','i','j'};
qsort(a,10,sizeof(a[1]),compare);
for(i=0;i<=9;i++)
{
printf("%c ",a[i]); // 排序好后 关键是在于输出 可以从头输出 从尾输出
}
printf("\n");
system("pause");
}
int compare(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}