qsort函数原型
void qsort(void *base, size_t num, size_t width, int(*compare)(const void*elem1, const void *elem2));
其中compare为比较函数的函数指针
width为字节大小
elem1和elem2分别为两个需要比较的元素地址
num为比较的元素个数
1.快速排序×××数组
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void*elem1, const void *elem2)//×××比较
{
return (*(int*)elem1 - *(int*)elem2);
}
int main()
{
int arr[10] = {1,3,5,7,9,2,4,6,8,0};
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
//快速排序
qsort(arr, sz, sizeof(int), int_cmp);
for (i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
printf("\n");
system("pause");
return 0;
}
2.快速排序字符数组
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int int_cmp(const void*elem1, const void *elem2)//×××比较
{
return (*(int*)elem1 - *(int*)elem2);
}
int str_cmp(const void*elem1, const void *elem2)//字符串比较
{
return strcmp((char*)*(int *)elem1,(char*)*(int *)elem2);
}
int main()
{
char *arr[] = { "dddd", "aaaa","ccccc", "bbbb" };//每个字符串产生一个首字符地址, //放到arr数组里
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
qsort(arr, sz, sizeof(char*), str_cmp);
//若在传函数参数的地方写成strcmp,strcmp返回值类型为char*,而qsort里的函数返回类型 //void*,比较两元素的地址传进去
for (i = 0; i < sz; i++)
{
printf("%s", arr[i]);
}
system("pause");
return 0;
}
转载于:https://blog.51cto.com/10797127/1721863