1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 typedef int DataType;
 5
 6 //比较器
 7 int mycmp(const void * a, const void *b);
 8
 9 //int (*compar)(const void *, const void *) 函数指针
10 void Sort(DataType * arr, int from, int to, int (*compar)(const void *, const void *));
11
12 void merge(DataType *arr, int from, int mid, int to, int (*compar)(const void *, const void *));
13
14 void printArray(DataType * arr, int n);
15
16 int main()
17 {
18     DataType arr[10] = {2,3,10,12,6,1,18,14,65,12};
19     printf("Befor sort:\n");
20     printArray(arr,10);
21     Sort(arr, 0, 9, mycmp);
22     printf("After sort:\n");
23     printArray(arr,10);
24     return 0;
25 }
26
27 void Sort(DataType * arr, int from, int to, int (*compar)(const void *, const void *))
28 {
29     if(from == to)
30         return;
31     DataType mid = (from + to)/2;
32     Sort(arr, from, mid, *compar);
33     Sort(arr, mid+1, to, *compar);
34     merge(arr, from, mid, to, *compar);
35
36 }
37
38 void merge(DataType * arr, int from, int mid, int to, int (*compar)(const void *, const void*))
39 {
40     int i = 0;
41     DataType * first1 = arr + from;
42     DataType * end1 = arr + mid + 1;
43     DataType * first2 = arr + mid + 1;
44     DataType * end2 = arr + to + 1;
45     DataType * temp = (DataType *)malloc((to - from + 1)*sizeof(DataType));
46     DataType * p = temp;
47     while((first1 != end1) && (first2 != end2))
48         *p++ = ((*compar)(first1, first2) ? *first1++ : *first2++);
49     if(first1 == end1)
50     {
51         while(first2 != end2)
52             *p++ = *first2++;
53     }
54     else
55     {
56         while(first1 != end1)
57             *p++ = *first1++;
58     }
59     p = temp;
60     for(int i = from; i <= to; i++)
61         arr[i] = *p++;
62     free(temp);
63 }
64
65 int mycmp(const void * a, const void *b)
66 {
67     const DataType * pa = (const DataType *)a;
68     const DataType * pb = (const DataType *)b;
69     if(*pa >= *pb)
70         return 1;
71     else
72         return 0;
73 }
74
75 void printArray(DataType * arr, int n)
76 {
77     for(int i = 0; i < n; i++)
78         printf("%d ", arr[i]);
79     printf("\n");
80 }

C语言 带比较器的归并排序

转载于:https://www.cnblogs.com/endenvor/p/7648477.html

C语言 带比较器的归并排序相关推荐

  1. 数据结构源码笔记(C语言):二路归并排序

    //实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...

  2. C语言算小数加减,C语言带小数加减乘除.doc

    C语言带小数加减乘除 /*Desgined by doBell-ConG*/ /*Function:simply add, subtract, multiply and divide*/ #inclu ...

  3. c语言学习进阶-C语言带命令行参数的文件数据批量计算

    C语言带命令行参数的文件数据批量计算 (1)假设输入文件中的数据为多行整数,把数据文件命名为"InputData.txt",也可以命名为任意的文件名,尝试设计一个c 语言程序, 主 ...

  4. c语音学习进阶-C语言带命令行参数的程序设计

    C语言带命令行参数的程序设计 (1)深入理解并学习带命令行参数的程序设计方法,使用c 语言完成带命令行参数的科学计算程序,能从给定的任意文件名的文件当中输入数据,并能向给定的任意文件名的输出文件当中输 ...

  5. C语言实现多线程的归并排序

    C语言实现多线程的归并排序 问题 ​ 利用多线程实现归并排序.归并排序是分治算法的代表,适合改写为多线程. 构造数据 ​ 数据规模为 2 ∗ 1 0 6 2*10^6 2∗106,整数. a r r ...

  6. c语言带默认参数吗,嵌入式C语言可以带“默认参数”的函数吗

    (文章来源:嵌入式时代) 使用C++开发过程序时,定义函数可以指定默认参数,例如 void fun(int x, int y=3); 在调用 fun() 时第二个参数可以不传递,此时 fun() 函数 ...

  7. mysql宏参数_C语言带参数的宏定义

    C语言允许宏带有参数.在宏定义中的参数称为"形式参数",在宏调用中的参数称为"实际参数",这点和函数有些类似. 对带参数的宏,在展开过程中不仅要进行字符串替换, ...

  8. go语言带cookie的net客户端请求与[]byte转string

    前些日子参加了一个叫Advent of Code的编程大赛,每天一道题,快活似神仙.这每道题都有自己的拼图数据输入puzzle input,要做题就需要用到该数据,把数据复制过来感觉又太麻烦,于是就兴 ...

  9. C语言带参数的回调函数怎么传参,C语言如何实现回调函数

    回调函数就是就是通过一个统一的接口实现不同的功能,C语言中的回调函数就是在代码中根据所传的参数不同而调用不同的回调函数 回调函数是一个程序员不能显式调用的函数:通过将回调函数的地址传给调用者从而实现调 ...

最新文章

  1. js插件---10个免费开源的JS音乐播放器插件
  2. 青龙羊毛——狸猫十堰
  3. signature=3ba70fa0be2ca50c615373e5495718b1,翻译文化观与翻译改写
  4. axios捕获401 赋值token
  5. 【Tools】TortoiseGit安装图解
  6. batch-size 深度学习笔记
  7. python3安装cx oracle,[求助]python3安装cx_Oracle 报错
  8. 港大计算机科学奖学金,香港大学奖学金情况怎么样?
  9. MATLAB中一些特殊的函数
  10. Yarn resourceManager 无法启动
  11. 洛谷 P2010 回文日期
  12. 恐龙机器人钢索恐龙形态_?四川自贡发现距今1.6亿年恐龙化石 已运抵自贡恐龙博物馆...
  13. HTML 事件参考手册:全局事件属性
  14. .bat文件创建和编辑方法
  15. python如何画神经网络特征图
  16. QQ签名资料特殊字符大全
  17. 关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析
  18. 激光雷达与毫米波雷达的区别
  19. 大数据分析 | 用 Python 做文本词频分析
  20. Python 截取图片识别文字并翻译

热门文章

  1. VC使用ActiveX控件常见问题
  2. 如何把html转换pdf,怎么把html转换成pdf
  3. java swing 组件渲染过程_Java Swing无法正确渲染
  4. python编写用户输入的是q么代码_Python课 #01号作业
  5. java vuser脚本_loadrunner12中JavaVuser脚本的编写
  6. 页面布局让footer居页面底部_网站各页面该如何布局关键词优化提升排名?
  7. 上传文件到服务器指定目录,文件名相同自动替换PHP实现代码
  8. php传递JSON数据
  9. 一款腾讯UED设计的提示插件(使用教程)
  10. Vue.js双向绑定的实现原理