函数指针作为函数参数,实现冒泡排序的升序排序和降序排序
来源:互联网 发布:飞鹰网络电视官网 编辑:程序博客网 时间:2024/06/06 08:59
#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;elsereturn 0;}//判断相邻数据的大小,如果前者大,降序排列需要交换int Descending(int a,int b){if(a<b)return 1;elsereturn 0;}void Display(int a[],int n)//输出数据元素{ int i;for(i=0;i<n;i++)printf("%5d",a[i]);printf("\n");}
程序运行结果
0 0
- 函数指针作为函数参数,实现冒泡排序的升序排序和降序排序
- 冒泡排序实现升序和降序排列
- 冒泡排序(升序和降序)的python代码实现
- 使用python原生态的min和max函数实现升序排序和降序排序
- 冒泡排序(包括升序和降序)
- Java冒泡排序(升序和降序)
- 快速排序的升序和降序
- 排序问题,升序和降序
- 冒泡排序-函数指针
- C函数关于qsort最后一个函数指针参数指向的函数的返回值和升序排序的关系
- 冒泡升序和冒泡排序
- 数组的排序(冒泡排序降序) 指针
- sort函数降序排序
- 函数指针作为参数(以冒泡排序qsort为例)
- 冒泡升序排序的数组实现和链表实现
- 堆排序 (包括升序和降序,Arraylist 实现)
- 快速排序:升序+降序----java实现
- 同一按钮,实现升序,降序 排序
- Android学习笔记之——Timer中schedule()的用法
- Android获取String的MD5值
- android之Fragment(官网资料翻译)
- unity 3d还是cocos2dx哪个适合游戏?
- Maven的基本原理
- 函数指针作为函数参数,实现冒泡排序的升序排序和降序排序
- 自定义美团的导航栏
- 手动脱WinUpack 壳实战
- java 编写和调用webservice文章
- centos7.1下载
- 控件只读设置
- 无题
- 一个不错的Android wifi工具类
- 不停止 MySQL 服务增加从库的两种方式