C语言-排序函数qsort

一、qsort函数

void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*))

base 数组名

num 元素个数(从前往后计算)

 size 数组元素所占字节( sizeof(type) )

*compar 排序原则(想怎么排:递增,递减,奇偶等)

//实例
int arr[5] = {5,6,2,1,3,4}
qsort(arr, 6, sizeof(int), cmp);

二、compar函数

int (*compar)(const void*p1,const void*p2)

compar函数的参数需要以const void *p1,const void *p2的形式来定义,并且手动强制转换类型

关于compar的return:

返回值小于0,p1指向的元素会被排到p2指向的元素的左边;

返回值等于0,p1指向的元素与p2指向的元素排序是未知的;

返回值大于0,p1指向的元素会被排到p2指向的元素的右边;

三、排序原则

1)递增排序
int cmp(const void* p1,const vodi* p2){

    int a1 = *(int*) p1;//把p1强行转换成数组(int)元素的指针类型,解引用指针变量p1取数组元素数据
    int a2 = *(int*) p2; 

    if(a1 < a2){
    return -1;
    }
 
    else if(a1 > a2){
    return 1;
    }

    return 0;
}

如果确保数组的数据相减不会超过32位整型,可以简写

int cmp(const void* p1,const vodi* p2){
    return (*(int*) p1) - (*(int*) p2);
}
2)递增排序
int cmp(const void* p1,const vodi* p2){

    int a1 = *(int*) p1;
    int a2 = *(int*) p2; 

    if(a1 > a2){
    return -1;
    }

    else if(a1 < a2){
    return 1;
    }

    return 0;
}

简化

int cmp(const void* p1,const vodi* p2){
    return (*(int*) p2) - (*(int*) p1);
}
3)偶数在前奇数在后
int Qua(int x){
return x%2 ;
}


int cmp(const void* p1,const vodi* p2){
    return Qua(*(int*) p1) - Qua(*(int*) p2);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值