函数指针作为函数參数,实现冒泡排序的升序排序和降序排序
Posted llguanli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数指针作为函数參数,实现冒泡排序的升序排序和降序排序相关的知识,希望对你有一定的参考价值。
#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"); }
程序执行结果
以上是关于函数指针作为函数參数,实现冒泡排序的升序排序和降序排序的主要内容,如果未能解决你的问题,请参考以下文章