C语言中提供的排序算法 qsort 的使用

系统提供的qsort排序的用法

该函数其实是一个快排,具体声明如下:

void qsort(void *base, 
           size_t nmemb, 
           size_t size,
           int (*compar)(const void *p, const void *q));

各参数的意义:
base:待排序的对象,比如一个数组;
nmemb:待排序的对象中元素的个数,比如一个数组中的元素个数;
size:待排序对象中的元素所占内存大小;
compar:自定义的比较函数,专业一点其实就是一个函数指针,一个返回值为int,传入参数为void型的两个待排数的函数。

我们再来详细讲一下compar这个函数,它的返回值为int,当为正数的时候,就认为交换条件成立,传入的两个参数p,q指向的数将会交换位置,否则不进行交换。

具体我们来看代码分析一下:

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

void print_array(int arr[],int n){ 
// 打印数组
    int* p = arr;
    while(p<arr+n){
        printf("%d",*p++);
    }
    printf("\n");
}

int cmp(const void* p,const void* q){ 
//  自定义比较函数,也就是传入qsort的compar
    int *pn = (int*)p;  
    int *pm = (int*)q; 
    // 进行类型转化;
    // 由于我们给一个数组中的数排序,所以转化为int*型就可以;

    int n = *pn; // 传入的第一个参数指向的数
    int m = *pm; // 传入的第二各参数指向的数
    
    if(m == n){
        return 0; //两个数相等则维持原来的顺序
    }else if(n > m){
        return 1;//第一个数大于第二个数就进行交换
    }else{
        return -1;//第一个数小于第二个数就维持原来的顺序
    }
    // 该函数其实就是将两个数调整为自小到大的顺序
}

int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    print_array(a,n);
    qsort(a,n,sizeof(int),cmp);
    print_array(a,n);
}

代码运行结果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值