- /*/////////////////////////////////////////////////////////////////////////////
- 文件名:函数指针
- 时间:2011/9/17
- /////////////////////////////////////////////////////////////////////////////*/
- ///////////////////////////////////////////////////////////////////////////////
- #include<stdio.h>
- ///////////////////////// 宏定义 //////////////////////////////////////////
- #define N 10
- ///////////////////////// 函数声明 //////////////////////////////////////////
- void swap(int *a,int *b);
- /*/////////////////////////////////////////////////////////////////////////////
- 函数名:Display
- 函数功能:输出数组元素
- 入口参数:int a[],int n
- 出口参数:
- /////////////////////////////////////////////////////////////////////////////*/
- void Display(int a[] , int n)
- {
- int i;
- for(i=0; i<n; i++)
- printf( "%4d" , a[i] );//打印4位的宽度
- }
- /*/////////////////////////////////////////////////////////////////////////////
- 函数名:BubbleSort
- 函数功能:主函数
- 入口参数:无
- 出口参数:无
- /////////////////////////////////////////////////////////////////////////////*/
- 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]);
- }
- /*/////////////////////////////////////////////////////////////////////////////
- 函数名:swap
- 函数功能:交换数组函数
- 入口参数:int *a,int *b
- 出口参数:无
- /////////////////////////////////////////////////////////////////////////////*/
- void swap(int *a,int *b)
- {
- int t;
- t=*a;
- *a=*b;
- *b=t;
- }
- /*/////////////////////////////////////////////////////////////////////////////
- 函数名:Ascending
- 函数功能:判断相邻数据大小,如果前者大,升序排列需要
- 交换
- 入口参数:int *a,int *b
- 出口参数:无
- /////////////////////////////////////////////////////////////////////////////*/
- int Ascending(int a,int b)
- {
- if(a>b)
- return 1;
- else
- return 0;
- }
- /*/////////////////////////////////////////////////////////////////////////////
- 函数名:Ascending
- 函数功能:判断相邻数据大小,如果前者小,升序排列需要
- 交换
- 入口参数:int *a,int *b
- 出口参数:无
- /////////////////////////////////////////////////////////////////////////////*/
- int Descending(int a,int b)
- {
- if(a<b)
- return 1;
- else
- return 0;
- }
- /*/////////////////////////////////////////////////////////////////////////////
- 函数名:main
- 函数功能:主函数
- 入口参数:无
- 出口参数:无
- /////////////////////////////////////////////////////////////////////////////*/
- void main()
- {
- int flag;
- int a[N] = {12,34,21,46,89,54,26,8,6,17};//排序前的数组
- while(1)
- {
- printf("输入1:从小到大排序。\n请输入2:从大到小排列.\n输入3:退出!\n");
- scanf("%d",&flag);
- switch( flag )
- {
- case 1:
- printf("排序前的数据为:\n");
- Display( a , N );
- printf("\n");
- BubbleSort(a,N,Ascending);
- printf("从小到大排列顺序为:\n");
- Display( a , N );
- printf("\n");
- break;
- case 2:
- printf("排序前的数据为:\n");
- Display( a , N );
- printf("\n");
- BubbleSort(a,N,Descending);
- printf("从小到大排列顺序为:\n");
- Display( a , N );
- printf("\n");
- break;
- case 3:
- return;
- break;
- default:
- printf("输入不合法,请重新输入。\n");
- break;
- }
- }
- }
效果图如下:
|