原创 函数指针作为函数参数实现冒泡排序

2011-10-5 20:27 2304 11 11 分类: MCU/ 嵌入式

/*/////////////////////////////////////////////////////////////////////////////

文件名:函数指针

时间: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;

}

}

}

冒泡排序函数指针作为函数参数.png

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条