qsort函数:执行快速排序。运用到回调函数
整型
#include<stdio.h>
//整型
int cmp(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;//顺序
//return *(int*)e1 - *(int*)e2;//逆序
}
int main()
{
int a[6] = { 1,3,8,4,6,2 };
int sz = sizeof(a) / sizeof(a[0]);
qsort(a, sz, sizeof(a[0]), cmp);
for (int i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
return 0;
}
字符型
#include<stdio.h>
#include<string.h>
int cmp(const void* e1, const void* e2)
{
return *(char*)e1 - *(char*)e2;
}
int main()
{
char a[10] = "iloveu";
int sz = strlen(a);
qsort(a, sz, sizeof(a[0]), cmp);
for (int i = 0; i < sz; i++)
{
printf("%c ", a[i]);
}
return 0;
}
double型
#include<stdio.h>
#include<stdlib.h>
int cmp(const void* e1, const void* e2)
{
return (*(double*)e1 - *(double*)e2>0)?1:-1;
}
int main()
{
int n,i;
scanf("%d", &n);
double a[1000];
for (i = 0; i < n; i++)
scanf("%lf", &a[i]);
qsort(a, n, sizeof(a[0]), cmp);
for (i = 0; i < n; i++)
{
printf("%lf ", a[i]);
}
}
结构体排序
#include<stdio.h>
#include<stdlib.h>
struct Stu
{
char name[20];
int price;
};
int cmp(const void* e1,const void* e2)//按价格排序
{
return (*(struct Stu*)e1).price - (*(struct Stu*)e2).price;
}
int cmp(const void* e1, const void* e2)//按名字排序
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->price);
}
int main()
{
struct Stu s[100] = { {"cyuyan",40},{"java",25},{"cplusplus",30 } };
qsort(s, 3, sizeof(s[0]), cmp);
for (int i = 0; i < 3; i++)
{
printf("%s %d\n", s[i].name, s[i].price);
}
}