
qsort()函数是C库提供的快排函数接口
#indlude <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
/*
* base:需要排序的数组
* nmemb:数组元素个数
* size: 每个元素的大小
* compar: 指向一个比较函数,根据cmp函数的比较,决定数组是升序排列还是降序排列
int型数据排序
// a > b 交换, 从小到大
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
// a < b 交换, 从大到小
int cmp1(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
}
int main()
{
int arr[5] = {4,5,3,7,6};
int n = sizeof(arr)/sizeof(arr[0]);
int size = sizeof(int);
qsort(arr, n, size, cmp);
qsort(arr, n, size, cmp1);
for (int i = 0;i < n;i++) {
printf("%d\t", arr[i]);
}
printf("\n");
return 0;
}
char类型
和int类型相似
int cmp1(const void *a, const void *b)
{
// 由大到小
return *(char *)b - *(char *)a;
}
int main()
{
char arr[5] = {'a','A','2','e','W'};
int n = sizeof(arr)/sizeof(arr[0]);
int size = sizeof(char);
qsort(arr, n, size, cmp1);
for (int i = 0;i < n;i++) {
printf("%c\t", arr[i]);
}
printf("\n");
return 0;
}
double类型
int cmp1(const void *a, const void *b)
{
// 由大到小
return ((*(double *)b - *(double *)a) > 0?1:-1);
}
int main()
{
double arr[5] = {4.3,5.4,4.2,4.31,5.134};
int n = sizeof(arr)/sizeof(arr[0]);
int size = sizeof(double);
qsort(arr, n, size, cmp1);
for (int i = 0;i < n;i++) {
printf("%f\t", arr[i]);
}
printf("\n");
return 0;
}
结构体类型
struct Date {
int date;
int count;
};
int cmp1(const void *a, const void *b)
{
// 由大到小
//根据date排序
//return ((struct Date *)b)->date - ((struct Date *)a)->date;
//根据count排序
return ((struct Date *)b)->count - ((struct Date *)a)->count;
}
int main()
{
struct Date arr[5] = {
{3,1},
{4,2},
{9,5},
{6,7},
{8,2}
};
int n = sizeof(arr)/sizeof(arr[0]);
int size = sizeof(arr[0]);
qsort(arr, n, size, cmp1);
for (int i = 0;i < n;i++) {
printf("%d\t", arr[i].date);
printf("%d\t", arr[i].count);
printf("\n");
}
printf("\n");
return 0;
}
字符串
- 二维数组
int cmp1(const void *a, const void *b)
{
// 由大到小
return strcmp((const char*)a, (const char*)b);
}
int main()
{
char arr[5][10] = {
"hello",
"world",
"china",
"xian",
"print"
};
int n = sizeof(arr)/sizeof(arr[0]);
int size = sizeof(arr[0]);
qsort(arr, n, size, cmp1);
for (int i = 0;i < n;i++) {
printf("%s\n", arr[i]);
}
printf("\n");
return 0;
}
- 字符指针数组
int cmp1(const void *a, const void *b)
{
// 由大到小
// 如果是指针数组,传进来的是二级指针,去*后是每一个字符指针(字符串的地址),最终交换的是字符指针的位置
return strcmp(*(char**)a, *(char**)b);
}
int main()
{
char *arr[5] = {0};
int n = sizeof(arr)/sizeof(arr[0]);
for (int i = 0;i < n;i++) {
arr[i] = (char *)malloc(sizeof(char*));
scanf("%s", arr[i]);
}
int size = sizeof(arr[0]);
qsort(arr, n, sizeof(char*), cmp1);
for (int i = 0;i < n;i++) {
printf("%s\n", arr[i]);
}
printf("\n");
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)