函数指针作为函数参数,实现冒泡排序的升序排序和降序排序

来源:互联网 发布:飞鹰网络电视官网 编辑:程序博客网 时间: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
原创粉丝点击