qsort:通用的快速排序 可以处理不同类型的数组数据
它里面包含四个参数:
void qsort(
void *base,//数组开始地址
size_t num,//数组个数
size_t width,//数个单个数据多大
int (__cdecl *compare )(const void *, const void *) //数组中两个值 比较的规则
);
函数指针:本质上是一个指针,而这个指针指向函数
int (*p)(int, int);
用qsort函数分别对整型数组,浮点型数组,字符串指针数组进行排序
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include <stdlib.h>
void Show_int(int* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void Show_string(const char* arr[], int len)
{
for (int i = 0; i < len; i++)
{
printf("%s ", arr[i]);
}
printf("\n");
}
void Show_double(double* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%f ", arr[i]);
}
printf("\n");
}
int Compare_int(const void* a, const void* b)
{
int arg1 = *(const int*)a;
int arg2 = *(const int*)b;
//return (arg1 > arg2) - (arg1 < arg2); //简单写法
if(arg1 > arg2)
{
return 1;
}
else if(arg1 < arg2)
{
return -1;
}
else
{
return 0;
}
}
int Compare_string(const void* a, const void* b)
{
const char* arg1 = *(const char**)a;
const char* arg2 = *(const char**)b;
int tmp = strcmp(arg1, arg2);
return tmp;
}
int Compare_double(const void* a, const void* b)
{
double arg1 = *(const double*)a;
double arg2 = *(const double*)b;
double tmp = arg1 - arg2;
double EPS = 1e-6;//0.000001
if (-EPS <= tmp && tmp <= EPS)
{
return 0;
}
else if (tmp > EPS)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
int arr[] = { 5,4,6,7,2,9,1 };
double drr[] = { 12.3,23.4,34,45.6,45.3, 11.003, 11.002 };
const char* crr[] = { "abc", "xyz", "quan", "zhang", "wang", "zhao", "abd", "jkl" };
qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(int), Compare_int);
qsort(crr, sizeof(crr)/sizeof(crr[0]), sizeof(char*), Compare_string);
qsort(drr, sizeof(drr)/sizeof(drr[0]), sizeof(double), Compare_double);
Show_int(arr, sizeof(arr) / sizeof(arr[0]));
Show_string(crr, sizeof(crr) / sizeof(crr[0]));
Show_double(drr, sizeof(drr) / sizeof(drr[0]));
return 0;
}
运行结果为: