• 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;
    }
  • 相关阅读:
    Intellij Idea快捷键
    JSP学习
    java 多线程
    java IO流(二)
    java IO流(一)
    java异常处理
    java集合类
    Java常见面试题
    面向对象编程的理解
    软件测试之BUG分析定位概述(QA如何分析定位BUG)(转载)
  • 原文地址:https://www.cnblogs.com/ZhuLuoJiGongYuan/p/9513200.html
Copyright © 2020-2023  润新知