C语言模拟实现标准库函数之qsort()

C语言模拟实现标准库函数之qsort() <1>
https://blog.csdn.net/csdn_kou/article/details/80158194

排序数字

int int_cmp(const void *elem1, const void *elem2)
{
return *(int *)elem1 - *(int *)elem2;
}

int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1 };
int size = sizeof(arr) / sizeof(arr[0]);
int i = 0;
qsort(arr, size, sizeof(int), int_cmp);
for (i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}

排序字符串

int compare(const void * a, const void * b)
{
    return (*(char*)a - *(char*)b);
}

int main()
{
    char s[4][6] = { "dog","cat","pig" ,"tiger"};  //字符串数组排序 
    qsort(s, sizeof(s)/sizeof(s[0]), sizeof(s[0]), compare); //sizeof(s[0])=sizeof(char)
    for (int i = 0; i<sizeof(s) / sizeof(s[0]); i++)
        printf("%s\n", s[i]);
    system("pause");
    return 0;
}

按字典顺序排列

#include
#include 
#include 

int compare(const void * a, const void * b)
{
    return (*(char*)a - *(char*)b);
}

int main()
{
    int n;
    scanf("%d", &n);
    char str[1000][1000];
    char temp[1000];
    for (int i = 0; iscanf("%s", &str[i]);
    }
    *str[n] = '\0';
    qsort(str, n, sizeof(str[0]), compare); //sizeof(s[0])=sizeof(char)

    for (int i = 0; iprintf("%s\n", str[i]);
    }
    return 0;
}

结构体排序

  • 1.例一
    (改编自网上代码)
#include 
#include 
#define NUM 5
typedef struct
{
    int date;
    int value;
}X_S;

int cmpfun1(const void * a, const void * b)
{
    X_S * p1 = (X_S *)a;
    X_S * p2 = (X_S *)b;
    return p1->value - p2->value;
}

int cmpfun2(const void * a, const void * b)
{
    X_S * p1 = (X_S *)a;
    X_S * p2 = (X_S *)b;

    return p1->value < p2->value;
}

int quickSort()
{
    X_S Xlist[NUM];
    int Ilist[NUM];
    int i = 0;
    for (i = 0; i < NUM; i++)
    {
        Xlist[i].date = i + 1;
        //double t = (double)i - 50.3;
        //Xlist[i].value = (int)(t * t + 5.6);
        Xlist[i].value = rand();
    }
    printf("\n-------------before sorted-------------\n");
    for (i = 0; i < NUM; i++)
    {
        printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);
    }

    qsort(Xlist, NUM, sizeof(X_S), cmpfun1);
    printf("\n-------------after  sorted-------------\n");

    for (i = 0; i < NUM; i++)
    {
        printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);
    }


    qsort(Xlist, NUM, sizeof(X_S), cmpfun2);
    printf("\n-------------after  sorted-------------\n");

    for (i = 0; i < NUM; i++)
    {
        printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);
    }
    return 0;
}

int main()
{
    quickSort();
    system("pause");
    return 0;
}
  • 例二

简陋的通讯录
https://blog.csdn.net/csdn_kou/article/details/80287640

你可能感兴趣的:(C语言模拟实现标准库函数)