qsort( )使用和实现

qsort() 的头文件是:
#include < stdlib.h >

函数原型:
void __cdecl qsort (void * base, size_t num ,size_t width, int ( __cdecl * comp)(const void * , const void * ) )

函数说明:
__cdecl :调用约定。
base:传入数组。
num:比较元素个数。
width:元素大小(一次读取字节个数)。
comp:大小比较函数(由自己写,传参时传入)

先使用一下qsort:

int cmp_int(const void *fp, const void *sp)
{
    return *((int *)fp) - *((int *)sp);
}
int cmp_double(const void *fp, const void *sp)
{
    return *((double *)fp) > *((double *)sp) ? 1 : -1;
}
int cmp_char(const void *fp, const void *sp)
{
    return *((char *)fp) - *((char *)sp);
}
int cmp_string(const void *fp, const void *sp)
{
    return strcmp((char *)fp,(char *)sp);
}
/////////////////////////////////////////////////////////
int main()
{
    /*****int*****/
    int arr1[5] = { 7, 1, 9, 3, 2, };
    qsort(arr1, 5, sizeof(arr1[0]), cmp_int);
    printf("int   ---> ");
    for (int i = 0; i < 5; i++)
    {
        printf("%d ",arr1[i]);

    }
    printf("\n\n");

    /*****double*****/
    double arr2[5] = { 2.5, 4.7, 2.51, 1.7, 1.70, };
    qsort(arr2, 5, sizeof(arr2[0]), cmp_double);
    printf("double---> ");
    for (int i = 0; i < 5; i++)
    {
        printf("%f ", arr2[i]);
    }
    printf("\n\n");

    /*****char*****/
    char arr3[6] = { "becda" };
    qsort(arr3, 5, sizeof(arr3[0]), cmp_string);
    printf("char  ---> ");
    for (int i = 0; i < 5; i++)
    {
        printf("%c ", arr3[i]);
    }
    printf("\n\n");

    /*****string*****/
    char arr4[5][10] = { "break", "hello", "kill", "bread", "company", };
    qsort(arr4, 5, 10, cmp_string);
    printf("string---> ");
    for (int i = 0; i < 5; i++)
    {
        printf("%s ", arr4[i]);
    }
    printf("\n\n");

    system("pause");
    return 0;
}

运行结果:
这里写图片描述
这里写图片描述

看起来挺好用,写一个my_qsort:

猜你喜欢

转载自blog.csdn.net/qq_36391130/article/details/78705724