qsort( )使用和实现

来源:互联网 发布:清华直博生待遇 知乎 编辑:程序博客网 时间:2024/06/13 10:37

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:

原创粉丝点击