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:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章