福泉市自己的网站,企业网站作业怎么做,分析网站设计,dw网站建设框架大小设定qsort及应用
qsort:快速排序函数,需要引用stdlib.h文件.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
参数:
base:需要排序的数组
num:数据个数(数组长度)
width:每个数据的字节数(sizeof(数据类型))
compa…qsort及应用
qsort:快速排序函数,需要引用stdlib.h文件.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
参数:
base:需要排序的数组
num:数据个数(数组长度)
width:每个数据的字节数(sizeof(数据类型))
compare:比较大小的依据 在进行排序时,一定需要比较两个数据的大小,由于qsort能对任意的数据进行排序,那么它无法知道排 序的规则,这个需要使用的人通过参数把这个传递给qsort,也就是上面的compare参数。 下面列举一些利用qsort的应用示例.
1.对char类型排序(注意是字符,不是字符串)
2.对int类型排序
3.对double类型排序
4.对Student类型,按姓名排序
5.对Student类型,按分数排序 typedef struct Student
{
char name[20];//姓名
int score;//分数
}Student;
int Cmp_char(const void* vp1, const void* vp2)
{
return *(char*)vp1 - *(char*)vp2;
}
//int Cmp_int(int* p1, int* p2)
int Cmp_int(const void *vp1,const void*vp2)
{
return *(int*)vp1 - *(int*)vp2;//默认升序
//return -( *(int*)vp1-*(int*)vp2);//降序
}
//int Cmp_double(const double*vp1,const double *vp2);
int Cmp_double(const void* vp1, const void* vp2)
{
//return *(double*)vp1 - *(double*)vp2; //12.3-12.7 -0.4 - 0 (这两个
相等) 错误的
double tmp *(double*)vp1 - *(double*)vp2;
if (tmp 0)
return 1;
else if (tmp 0)
return -1;
else
return 0;
}
int Cmp_stu_src(const void* vp1, const void* vp2)
{
return ((Student*)vp1)-score - ((Student*)vp2)-score;
}
int Cmp_stu_name(const void* vp1, const void* vp2)
{
return strcmp(((Student*)vp1)-name, ((Student*)vp2)-name);
}
void Show(int* arr, int len)
{
for (int i 0; i len; i)
{
printf(%d ,arr[i]);
}
printf(\n);
}
void Show(double* arr, int len)
{
for (int i 0; i len; i)
{
printf(%.2lf ,arr[i]);
}
printf(\n);
}
void Show(Student* arr, int len)
{
for (int i 0; i len; i)
{
printf(%s,%d\n,arr[i].name,arr[i].score);
}
}
int main()
{
char arr[] aajdsfljsadzyxytp;
int brr[] {1,6,9,0,2,5,8,12,56,7,91};
double crr[] {12.3,34.5,6.4,12.7,12.2,26.7};
Student drr[] { {liubei,80},{caocao,70},{sunquan,90},
{zhangfei,30},{guanyu,85}};
//qsort(arr,strlen(arr),sizeof(char),Cmp_char);
//printf(%s\n,arr);
//qsort(brr,sizeof(brr)/sizeof(brr[0]),sizeof(int),Cmp_int);
//Show(brr, sizeof(brr) / sizeof(brr[0]));
//qsort(crr, sizeof(crr) / sizeof(crr[0]), sizeof(double), Cmp_double);
//Show(crr, sizeof(crr) / sizeof(crr[0]));
//按分数从低到高
//qsort(drr,sizeof(drr)/sizeof(drr[0]), sizeof(Student), Cmp_stu_src);
//Show(drr, sizeof(drr) / sizeof(drr[0]));
//按姓名排序
qsort(drr, sizeof(drr) / sizeof(drr[0]),sizeof(Student),Cmp_stu_name);
Show(drr, sizeof(drr) / sizeof(drr[0]));
return 0;
}