zoukankan      html  css  js  c++  java
  • 44. 通过使用sqort函数对各种类型数据进行排序,熟悉sqort可控的对外接口,也就是sqort专用回调函数的实现。

    //使用基于数组的qsort快速排序函数,实现对各种类型的数据进行排序
    1.先了解qsort
    1)qsort是基于数组的快速排序函数
    2) void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));//参数设计成void*的目的是使之范型化。
    3) int (*compar)(const void*,const void*)//注意这两个参数是要比较的两个数组元素的地址,而非直接的数据。
    4)需要根据qsort的 函数指针 参数的类型,来实现自己的回调函数
    5)sqort 只对 compar 返回的正值感兴趣,也就是当返回正值才发生交换行为。
        2.qsort与其回调函数各分工的关系
           排序 == 比较+交换
           回调函数做的事是比较,qsort自己做的是交换。



    实现对整型数组的排序
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int callBackCompare(const void* pa,const void* pb)//升序
    {
    #if 0
        if( *(int*)pa > *(int*)pb )//大于的时候交给sqort做交换
            return 1;
        else
            return -1;
    #endif
        
    #if 0    
        return *(int*)pa - *(int*)pb;
    #endif
    }
    
    int main(void)
    {
        int arr[10] = {6,5,4,3,2,1,7,8,9,0};
    
        qsort(arr,10,4,callBackCompare);
    return 0;
    }




    实现对字符串的排序

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int callBackCompare(const void* pa,const void* pb)//升序
    {
    
    #if 0  //错误
        if(strcmp(*(char*)pa,*(char*)pb) > 0)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    
    
    #endif
    
    #if 0  //错误  解引用后只取了一个字节空间的数据
        if(strcmp((char*)(*(char*)pa),(char*)(*(char*)pb)) > 0)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    
    
    #endif
    
    
    #if 0  //正确
        if(strcmp(*(char**)pa,*(char**)pb) > 0)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    
    
    #endif
    
    #if 0  //正确,犯贱用法 解引用后取了四个字节空间的数据
        if( strcmp( *(int*)pa, *(int*)pb ) > 0 )
        {
            return 1;
        }
        else
        {
            return -1;
        }
    
    
    #endif
    
    }
    
    
    
    int main(void)
    {
        int i;
        char* arr[4] = {"dOracle","cHuaWei","aMicroSoft","bApple"};
        qsort(arr,4,4,callBackCompare);
    
        for(i = 0;i<4;i++)
        {
            printf("%s
    ",arr[i]);
        }
    
        return 0;
    }
  • 相关阅读:
    转:MongoDB · 引擎特性 · journal 与 oplog,究竟谁先写入?
    Oracle 11g R2(11.2.0.4) RAC 数据文件路径错误解决--ORA-01157 ORA-01110: 数据文件
    Oracle 高可用作业测试
    Oracle 常见进程
    Mycat-server-1.6.5 常见分片方式
    转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构
    RabbitMQ 安装
    cmd 切换目录和配置环境变量和Curl批量执行Url
    sql中表变量
    Core 项目下使用SQl语句
  • 原文地址:https://www.cnblogs.com/ZhuLuoJiGongYuan/p/9513200.html
Copyright © 2011-2022 走看看