函数指针(之一)——在排序算法中的应用
2016-03-23 23:17
288 查看
变量指针代表的是变量的内存访问地址,虽然是映射过的。
同样,函数指针,就代表函数代码在内存的入口地址,通过函数指针可以调用函数。
以简单的冒泡排序作为例子,把元素的比较方法剥离出来,作为一个函数,可能是增序,也可以是逆序。
首先声明函数原型:
接下来,实现排序函数:
同样,函数指针,就代表函数代码在内存的入口地址,通过函数指针可以调用函数。
以简单的冒泡排序作为例子,把元素的比较方法剥离出来,作为一个函数,可能是增序,也可以是逆序。
首先声明函数原型:
//比较两个元素的函数原型 int hjd_compare(double x, double y); //函数指针定义 int (*hjd_compare_ptr)(double, double); //排序函数的原型 void bubble_sort(double *ar, int rcount, int (*hjd_compare_ptr)(double, double));
接下来,实现排序函数:
void bubble_sort(double *ar, int rcount, int (*compare_func_ptr)(double, double)) { int i=rcount-1, j=0; for(i=0;i<rcount;i++) { for(j=rcount-1;j>i;j--) { if(!((*compare_func_ptr)(*(ar+j), *(ar+j-1)))) //在这里可以调用函数指针执行相应的函数</span> { double tmp = *(ar+j-1); *(ar+j-1)= *(ar+j); *(ar+j) = tmp; } } } }在主调用函数里,根据条件为函数指针赋予合适的函数名,从而实现调用相应的函数的目的。
int main(void) { .... .... bubble_sort(ar, nCount, (int (*)(double, double))(hjd_compare)); //在这里把hjd_compare函数赋值给函数指针 .... .... }
相关文章推荐
- 控制台版2048 version_1.0总结
- 学以致用之冒泡排序
- 【Design Pattern】外观模式 Facade
- 新起点
- ie11不再支持attachEvent事件
- gnuplot画图一
- 三色球问题
- OpenCV基础
- collectionview实现无限轮播
- NYOJ----776删除元素
- C# byte数组与Image相互转换的方法
- ubuntu虚拟机配置nfs服务器软件的步骤
- C/C++语言void及void指针深层探索
- 几种排序算法的简单总结
- auto format code in visual studio
- 基础练习 数的读法
- 观察者模式
- Druid连接池及监控在spring中的配置
- 基础练习 Sine之舞
- Object类