博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序及回调函数的使用
阅读量:7070 次
发布时间:2019-06-28

本文共 2021 字,大约阅读时间需要 6 分钟。

回调函数的特点:函数的调用者不知道具体的调用时机,由操作系统或代码框架来决定
这样的好处就是可以将有些特定的逻辑单独提取出来,让调用者插入一些自定制的代码
我们先来写一个冒泡排序
1 #include
2 void Swap(int* num1, int* num2) 3 { 4 int temp = 0; 5 temp = *num1; 6 *num1 = *num2; 7 *num2 = temp; 8 } 9 void BubbleSort(int arr[], int size)10 {11 //在这里设置一个边框12 //[0,bound]已排序区间13 //[bound,size]未排序区间14 int bound = 0;15 //第一遍循环的目的是将最小值放在最前面,依次将较小值排列16 for (; bound < size; bound++)17 {18 //进行升序排序从数组的末尾开始比较19 for (int cur = size - 1; cur > bound; --cur)20 {21 //如果前一个元素大于后一个元素则交换位置22 if (arr[cur - 1] > arr[cur])23 {24 Swap(&arr[cur - 1], &arr[cur]);25 }26 } 27 }28 }29 int main()30 {31 int arr[] = { 9,3,5,2,1,6,7 };32 int size = sizeof(arr)/sizeof(arr[0]);33 BubbleSort(arr, size);34 for (int i = 0; i < size; i++)35 {36 printf("%d",arr[i]);37 }38 return 0;39 }

 

在这个冒泡排序中只可以选择升序排序或者降序排序,如果是两个都需,则还需要
在写一个函数来实现,就显得过于麻烦,在这里就体现出了回调函数的用途。
可以将程序改为如下:
 
1 #include
2 typedef int (*Comp)(int a, int b); 3 void Swap(int* num1, int* num2) 4 { 5 int temp = 0; 6 temp = *num1; 7 *num1 = *num2; 8 *num2 = temp; 9 }10 void BubbleSort(int arr[], int size,Comp cmp)11 {12 //在这里设置一个边框13 //[0,bound]已排序区间14 //[bound,size]未排序区间15 int bound = 0;16 for (; bound < size; bound++)17 {18 //从数组的末尾开始比较19 for (int cur = size - 1; cur > bound; --cur)20 {21 if (cmp(arr[cur] , arr[cur-1]))22 {23 Swap(&arr[cur - 1], &arr[cur]);24 }25 }26 }27 }28 //升序排序29 int less(int a, int b)30 {31 return a < b ? 1 : 0;32 }33 //降序排序34 int Greater(int a, int b)35 {36 return a > b ? 1 : 0;37 }38 int main()39 {40 int arr[] = { 6,2,4,1,7,8,5 };41 int size = sizeof(arr) / sizeof(arr[0]);42 //这里想要进行升序排序的时候可以直接调用less43 BubbleSort(arr, size, less);44 for (int i = 0; i < size; i++)45 {46 printf("%d", arr[i]);47 }48 printf("\n");49 //想要进行降序排序的时候可以直接调用Greater50 BubbleSort(arr, size, Greater);51 for (int i = 0; i < size; i++)52 {53 printf("%d", arr[i]);54 }55 return 0;56 }

 

转载于:https://www.cnblogs.com/cuckoo-/p/10466605.html

你可能感兴趣的文章
js手札--关于AMD的简单分析
查看>>
Elixir Ranch: 一个用于处理套接字的网络库
查看>>
JMS规范及相关实现
查看>>
衡量企业应用数据库性能的6大指标
查看>>
ng的缓存模板的用法
查看>>
Vimium 快捷键指南
查看>>
Javascript MV*模式
查看>>
【JavaScript】【函数】蛛丝马迹
查看>>
Windows Media Center SDK 在 GitHub 上发布
查看>>
原创C# Winform+DevExpress皮肤框架
查看>>
主讲人—周梦康(楚松)系列技术直播
查看>>
PostgreSQL Heap Only Tuple - HOT (降低UPDATE引入的索引写IO放大) ...
查看>>
SpringBoot(十六)_springboot整合JasperReport6.6.0
查看>>
牵扯256万人!国内一AI公司人脸识别数据泄露
查看>>
Spring cloud配置客户端(二)
查看>>
数字对讲系统开发札记(前端linux c 后端 c#)
查看>>
C++构造函数的default和delete
查看>>
linux禁止root用户直接登录sshd并修改默认端口
查看>>
2019年,AI安防行业的10大未知丨中国人工智能安防峰会
查看>>
Guidelines for Function Compute Development - Use Fun Local for Local Running and Debugging
查看>>