C语言下的qsort函数

时间:2022-09-02 23:17:45

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;}

运行结果:

C语言下的qsort函数

警告:

C语言下的qsort函数