函数指针作为函数參数,实现冒泡排序的升序排序和降序排序
#include<stdio.h>#define N 10//定义数组元素个数
int Ascending(int a,int b);//升序排列的函数声明
int Descending(int a,int b);//降序排列的函数声明
void swap(int*,int*);//交换数据的函数声明
void BubbleSort(int a[],int n,int (*compare)(int,int));//声明排序函数,通过函数指针作为函数调用
void Display(int a[],int n);//输出数组元素的函数声明
void main()
{int a[N]={12,34,21,46,89,54,26,8,6,17};int flag;while(1){printf("输入1:从小到大排序。\n输入2:从大到小排序\n输入3:退出!
\n"); scanf("%d",&flag); switch(flag) { case 1: printf("排序前的数据为:"); Display(a,N); BubbleSort(a,N,Ascending);//从小到大排序。将函数作为參数传递 printf("从小到大排列后的数据为:"); Display(a,N); break; case 2: printf("排序前的数据为:"); Display(a,N); BubbleSort(a,N,Descending);//从大到小排序。将函数作为參数传递 printf("从大到小排列后的数据为:"); Display(a,N); break; case 3: return; break; default: printf("输入数据不合法,请又一次输入。\n"); break; } } } //冒泡排序,将函数作为參数传递,推断是从小到大还是从大到小排序 void BubbleSort(int a[],int n,int(*compare)(int,int)) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n-1;j++) if((*compare)(a[j],a[j+1])) swap(&a[j],&a[j+1]); } } //交换数组的元素 void swap(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } //推断相邻数据的大小,假设前者大,升序排列须要交换 int Ascending(int a,int b) { if(a>b) return 1; else return 0; } //推断相邻数据的大小,假设前者大,降序排列须要交换 int Descending(int a,int b) { if(a<b) return 1; else return 0; } void Display(int a[],int n)//输出数据元素 { int i; for(i=0;i<n;i++) printf("%5d",a[i]); printf("\n"); }
程序执行结果
函数指针作为函数參数,实现冒泡排序的升序排序和降序排序相关推荐
- c语言指针和函数对数组A升序排序,函数指针作为函数參数,实现冒泡排序的升序排序和降序排序...
#include #define N 10//定义数组元素个数 int Ascending(int a,int b);//升序排列的函数声明 int Descending(int a,int b);/ ...
- C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转
目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...
- c语言函数指针,基于函数回调模拟实现qsort函数,实测案例
前言 qsort函数C语言编译器函数库自带的排序函数. qsort 的函数原型是void qsort (void*base,size_t num,size_t width,int (__cdecl*c ...
- 函数指针 和 函数指针数组 和 函数指针数组
//先看一些函数指针的例子(吸纳了网上兄弟的方法) #include <stdio.h> void MyFun(int x); //这个申明也可写成:void MyFun( int ); ...
- c语言指针回调,C语言函数指针,函数动态回调
经常有人问,学习这些理论有什么用?我无语了.因为懂行的人不会问这种问题:不懂行的人,你再怎么解释人家也不会明白这个道理.如果人家追问:"这个能换钱吗?",我就直接SB了. 这是一个 ...
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针 ...
- 函数指针和函数指针数组及其应用
1. 函数指针 先来看一个简单的例子: int a=3; void *p=&a; 这是一个基础的不能再基础的例子.相信学过指针的都能看得懂.P是一个指针,指向a.a 是一个整形变量.函数指针和 ...
- C++函数指针和函数重载
函数重载与函数指针 当使⽤用重载函数名对函数指针进⾏行赋值时 根据重载规则挑选与函数指针参数列表⼀致的候选者 严格匹配候选者的函数类型与函数指针的函数类型 方法一: // 声明一个函 ...
- 【转】回调函数,函数指针与函数对象
原文出处:http://shudingbo.spaces.live.com/blog/cns!C33400475B08F157!423.entry?wa=wsignin1.0&sa=24651 ...
- C/C++ 函数指针调用函数
01 //C/C++ 函数指针调用函数 02 #include<iostream> 03 using namespace std; 04 05 void site1() 06 { 07 ...
最新文章
- TCP的协议特点(对于《Linux高性能服务器编程》的部分摘录以及自己的部分见解)
- 全球及中国真空管太阳能集热器行业竞争状况及投资策略研究报告2021年版
- Linux crontab定时任务示例
- mybatis关联配置(一对多配置)
- [Leedcode][JAVA][第14题][最长公共前缀][二分][横竖扫描][分治]
- 阿里程序员双11加班吃什么?
- leetcode771题
- windows下利用pybind11生成pyd库
- 可替代Visio的免费流程图软件draw.io(含下载地址)
- 安装VS2015卡在创建系统还原点
- 公募“一哥”王亚伟已在深圳前海低调复出
- 前端面试题之浏览器系列
- oracle9i rac for aix,oracle 11gR2 rac for aix 第二个节点运行root.sh不成功问题处理
- 为CIFAR图片分类模型添加BN
- 数商云工业制造行业B2B电商平台解决方案
- 嵌入式物联网项目实践1.1
- SPA 中前端路由基本原理与实现方式
- MathType 6.9嵌入到Office(word)2016中
- Web 攻防之业务安全:越权访问漏洞 测试.
- 手把手教你做时间序列图
热门文章
- [STL源码剖析]RB-tree的插入操作
- [VBA]_更改单元格背景颜色
- python 实现的huffman 编码压缩,解码解压缩
- CFS之vruntime记录
- 关于ext4 simg fill chunk type
- hisi mmz模块驱动讲解
- 多网卡配置同一网段IP情况解析
- linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程
- 亚太地区数学建模优秀论文_2020APMCM 亚太地区大学生数学建模竞赛
- Centos7安装整合Apache+PHP,安装nginx后nginx无法解析.php文件