zoukankan      html  css  js  c++  java
  • C语言 stdlib.h自带函数库:qsort()排序,简称"快排"

    对于qsort()函数,stdlib.h的描述很有意思:

    void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 

    void* base表示的是:任何形式的数组,int*,char*,float*都可以,任何指针都可以赋给void*

    size_t num表示的是:size_t其实就是int的意思,这里需要你定义出这个数组的长度

    size_t width表示的是:sizeof(你定义的这个数组的类型),比如sizeof(int)

    int(__cdecl*compare)(const void*,const void*)表示的是:这是一个返回类型为int,函数名字为compare,其中两个参数都为const void*类型的函数

    下面我来编写一个实例来演示这个qsort如何使用:

    void print(int a[],int n)
    {
        for(int i=0;i<n;i++)
            printf("%d	",a[i]);
    }
    
    int compare(const void *a,const void *b)
    {
        int *a1=(int *)a;//因为a为void*类型,需要把其转换成int*类型 
        int *b1=(int *)b;//因为b为void*类型,需要把其转换成int*类型 
        int num1=*a1;//将a1的值赋给num1 
        int num2=*b1;//将b1的值赋给num2 
        return num1-num2;//返还出num1于num2的差 
    } 
    int main(){
        int a[8]={8,5,6,1,2,4,7,3};
        int n=8;
        qsort(a,n,sizeof(int),compare);
        print(a,n);
    } 

    实际上,如果你理解列compare函数,其实可以把compare函数写的很简单

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

    这里必须要强调的是compare函数一定是要返还int类型,这个是stdlib.h规定好了的,所以一定要按上述的要求定义函数,决对不能更改!

    void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 

    这里挖一个坑,如果我定义一个float数组,那么这个数组是如何qsort()来求解呢?下回讲解。

    除了qsort以外,stdlib还有一个有意思的查找函数bsearch(),下次也抽时间讲解。

  • 相关阅读:
    HTML学习 day04
    HTML学习 day03
    HTML学习 day02
    原生Js监听普通dom尺寸变化
    JavaScript-获取地址栏参数
    Window 下 MySQL 环境的安装
    JavaScript 中的12种循环遍历方法
    前端PS常用切图技巧
    requirejs教程(一):基本用法
    seajs教程(一):基本用法
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13179082.html
Copyright © 2011-2022 走看看