/*/////////////////////////////////////////////////////////////////////////////
文件名:函数指针
时间: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;
}
}
}
效果图如下:
|