qsort是编译器自带的快速排序函数
函数原型为void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
参数含义为:void*base----void*接受任何类型的地址,传入要排序的数组地址
size_t num----size_t为无符号整型,传入数组元素个数
size_t width----传入每个元素的大小
int(__cdecl*compare)(const void*,const void*)----compare是一个函数指针,指向一个比较函数, 返回值为int,参数为const void*。
用来比较元素,若为int cmpare(const void*a , const void*b)。如果是升序,那么就是 如果a比b大返回一个正值(a 将被排在b后面),小则负值(a将被排在b前面),相等返 0(不 变)。降序则相反。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int cmp(const void*str1, const void*str2){return *(int*)str1 - *(int*)str2;}int cmp_d(const void*str1, const void*str2) //返回值会有从double到int的转换警告{return *(double*)str1 - *(double*)str2;}int cmp_c(const void*str1, const void*str2){return *(char*)str1 - *(char*)str2;}int cmp_f(const void*str1, const void*str2){return *(float*)str1 - *(float*)str2;}int main(){int arr[] = { 2, 5, 7, 3, 4 }; //整型数组 qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp); int i = 0;for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}printf("\n");double arr1[] = { 1.77, 4.66, 3.4, 5.12, 7.99 }; //double数组qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp_d);for (i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++){printf("%lf ", arr1[i]);}printf("\n");char arr2[] = { 'a', 'w', 'd', 'g', 'q' }; //字符数组qsort(arr2, sizeof(arr2) / sizeof(arr2[0]), sizeof(arr2[0]), cmp_c);for (i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i++){printf("%c ", arr2[i]);}printf("\n");float arr3[] = { 1.0, 4.5, 8.0, 3.4, 5.0 }; //float数组qsort(arr3, sizeof(arr3) / sizeof(arr3[0]), sizeof(arr3[0]), cmp_f);for (i = 0; i < sizeof(arr3) / sizeof(arr3[0]); i++){printf("%f ", arr3[i]);}printf("\n");system("pause");return 0;}
运行结果:
警告: