程序设计课上的qsort应用

程序设计课上的qsort应用

记录一下C语言的qsort库函数调用


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define TEST_SIZE    10
#define STRING_LEN   20

需要的一些预编译&宏定义
qsort()<stdlib.h>

int compare_int(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;//返回值只分正负,不用在意具体数字
}
void sort_intarr()
{
    int arr[TEST_SIZE], i;
    srand(1);
    printf("sort_intarr before:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%d%c", arr[i] = rand(), i == TEST_SIZE - 1 ? '\n' : ' ');//这是个绝妙的运算符,如果到结尾就打印换行符,否则是空格
    qsort((void*)arr, TEST_SIZE, sizeof(int), compare_int);//这是调用函数,所以不用写compare_int的参数,而且在IDE可以看到qsort的参数类型,不用自己干想
    printf("sort_intarr after:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%d%c", arr[i], i == TEST_SIZE - 1 ? '\n' : ' ');
}


int compare_float(const void *a, const void *b)
{
    return *(float *)a - *(float *)b;
}
void sort_floatarr()
{
    float arr[TEST_SIZE];
    int i;

    srand(2);
    printf("sort_floatarr before:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%f%c", arr[i] = rand() / 100.0, i == TEST_SIZE - 1 ? '\n' : ' ');

    qsort((void*)arr, TEST_SIZE, sizeof(float), compare_float);
    printf("sort_floatarr after:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%f%c", arr[i], i == TEST_SIZE - 1 ? '\n' : ' ');

}


char rand_char()
{
    char    arr[2] = { 'A', 'a' };

    return arr[rand() % 2] + rand() % 26;
}
int compare_char(const void *a, const void *b)
{
    return *(char *)a - *(char *)b;//这样会导致大小写字母排序,大写永远在前面
}
void sort_chararr()
{
    char arr[TEST_SIZE];
    int    i;

    srand(3);
    printf("sort_chararr before:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%c%c", arr[i] = rand_char(), i == TEST_SIZE - 1 ? '\n' : ' ');

    qsort((void*)arr, TEST_SIZE, sizeof(char), compare_char);
    printf("sort_chararr after:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%c%c", arr[i], i == TEST_SIZE - 1 ? '\n' : ' ');
}

int compare_string(const void *a, const void *b)
{
    return strcmp((char *)a, (char *)b);//char*是字符串排序
}


void sort_stringarr()
{
    char    stringarr[TEST_SIZE][STRING_LEN];//此处创建了一个数组,因此排序的对象是二维数组
    int i, j;

    srand(4);
    printf("sort_stringarr before:\n");
    for (i = 0; i < TEST_SIZE; i++)
    {
        int rand_len = 3 + rand() % (STRING_LEN - 2);
        for (j = 0; j < rand_len - 1; j++)
            stringarr[i][j] = rand_char();
        stringarr[i][rand_len - 1] = '\0';
        printf("%s\n", stringarr[i]);
        qsort((void *)stringarr[i], rand_len - 1, sizeof(char), compare_char);//-1是为了不把\0加入到排序过程中
    }
    qsort(stringarr, TEST_SIZE, sizeof(char)*STRING_LEN, compare_string);//排序对象长度字节数,对数组类型排序时

    printf("sort_stringarr after:\n");
    for (i = 0; i < TEST_SIZE; i++)
        printf("%s\n", stringarr[i]);
}

int main(void)
{
    void sort_intarr();
    void sort_floatarr();
    void sort_chararr();
    void sort_stringarr();

    sort_intarr();
    sort_floatarr();
    sort_chararr();
    sort_stringarr();

    system("pause");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值