qsort函数的使用

  我们在使用冒泡排序法做题的时候,经常会遇到运算次数过多程序超时的情况,而且冒泡排序法只能对整形数组进行排序。

        为了解决这些问题!就使用qsort函数吧!

1.使用方法

1. 首先qsort函数是库函数,使用前应包含对应头文件#include<stdlib.h>                                          2.qsort函数的函数声明:                                                                                                                             int qsort(void*  base,size_t  num,size_t  width,int(*compare)(const *void e1)(const *void e2))

其中,void*  base是需排列的数组,size_t  num是数组长度,size_t  width是单个数组元素大小(字节),int(*compare)(const *void e1)(const *void e2)则是判断元素大小的依据函数。           看不懂没关系,由于是C初阶,会使用即可

 使用:qsort(需要被排序的数组,数组元素个数,每个元素大小,排序函数名

大致使用模版如下:

---------------------------------------------------------------------------------------------------------------------------------
int compare(const void* p1, const void* p2) //
{
    return p1 - p2; 
    return p2 - p1;   
    //返回类型(正:调换前后元素,负:不变
    //注:p1和p2的类型根据实际情况写
}
 
int main()
{
    int arr[] = { 5,2,3,1,8,9,2,0,3,5 };
    int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数 40 / 4 = 10
 
    qsort(arr, sz, sizeof(arr[0]), compare);
    //arr - 指向要排序的数组的第一个元素的指针。
    //sz -  由 arr 指向的数组中元素的个数
    //sizeof(arr[0]) - 数组中每个元素的大小,以字节为单位。
    //compar - 用来比较两个元素的函数。
 
    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

实际解决问题:

整形数组排列:                                                                                                                                   --------------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>                                                                                                                                #include<stdlib.h>
int cmp_int_arr(const void*p1,const void*p2) {
    return *((int*)p1) - *((int*)p2);
}                                                                                                                                                          int main()
{
    int arr1[] = { 1,5,6,5,8,8,8,1,2,2,5,4 };
    int sz1 = sizeof(arr1) / sizeof(arr1[0]);
    qsort(arr1, sz1, sizeof(arr1[0]), cmp_int_arr);
    for (int i = 0; i < sz1;i++) {
        printf("%d ", arr1[i]);
    }                                                                                                                                                      return 0;}

   

--------------------------------------------------------------------------------------------------------------------------------

 

                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值