• c函数模板实现


    实现冒泡排序模板

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    
    #define LEN 20
    
    void b_sort(void *bs, size_t num, size_t size,
            int (*compar)(const void *, const void *))
    {
        int sorted = 0;
        char *base = (char*)bs;    // void * 算术运算g++会发出警告,为了消除警告,强制转换成char*
        void *ptmp = malloc(size);
        for( ; !sorted; num--) {
            sorted = 1;     // 每一趟都假设排序好了
            for(size_t i=1; i<num; i++)
                if(compar(base + i*size, base + (i-1)*size) < 0) {
                    sorted = 0;
                    memcpy(ptmp, base + i*size, size);
                    memcpy(base + i*size, base + (i-1)*size, size);
                    memcpy(base + (i-1)*size, ptmp, size);
                }
        }
        free(ptmp);
    }
    
    
    int compar(const void *a, const void *b)
    {
        return *(int*)a - *(int*)b;
    }
    
    // 主函数
    int main()
    {
        int max = 100, min = 1;
        int v[LEN];
    
        srand(time(NULL));
    
        for(int i=0; i<LEN; i++) {
            v[i] = rand() % max + min;
            printf("%d %s", v[i], i==LEN-1 ? "
    " : "");
        }
    
        b_sort(v, LEN, sizeof(int), compar);
    
        for(int i=0; i<LEN; i++)
            printf("%d %s", v[i], i==LEN-1 ? "
    " : "");
    
        return 0;
    }
    
    
  • 相关阅读:
    企业生产环境不同业务linux系统分区方案
    linux 文件 s 权限
    shell中的命令与特殊符号
    Linux数组基础
    shell脚本学习(1)
    文件的压缩与打包
    Linux 磁盘管理基础命令df,du,fdisk,mke2fs
    mkpasswd的使用
    P1080 国王游戏
    P1315 观光公交
  • 原文地址:https://www.cnblogs.com/wjundong/p/11815223.html
Copyright © 2020-2023  润新知