[菜农助学交流] 函数指针作为函数参数实现冒泡排序

[复制链接]
2896|3
 楼主| tao560532 发表于 2011-9-17 19:42 | 显示全部楼层 |阅读模式
  1. /*/////////////////////////////////////////////////////////////////////////////
  2. 文件名:函数指针
  3. 时间:2011/9/17
  4. /////////////////////////////////////////////////////////////////////////////*/
  5. ///////////////////////////////////////////////////////////////////////////////
  6. #include<stdio.h>

  7. ///////////////////////// 宏定义 //////////////////////////////////////////
  8. #define N 10

  9. ///////////////////////// 函数声明 //////////////////////////////////////////
  10. void swap(int *a,int *b);
  11. /*/////////////////////////////////////////////////////////////////////////////
  12. 函数名:Display
  13. 函数功能:输出数组元素
  14. 入口参数:int a[],int n
  15. 出口参数:
  16. /////////////////////////////////////////////////////////////////////////////*/
  17. void Display(int a[] , int n)
  18. {
  19. int i;
  20. for(i=0; i<n; i++)
  21. printf( "%4d" , a[i] );//打印4位的宽度
  22. }

  23. /*/////////////////////////////////////////////////////////////////////////////
  24. 函数名:BubbleSort
  25. 函数功能:主函数
  26. 入口参数:无
  27. 出口参数:无
  28. /////////////////////////////////////////////////////////////////////////////*/
  29. void BubbleSort( int a[] , int n , int(*compare)( int , int ))
  30. {
  31. int i,j;
  32. for(i=0;i<n;i++)
  33. for(j=0;j<n-1;j++)
  34. if((*compare)(a[j],a[j+1]))
  35. swap(&a[j],&a[j+1]);
  36. }
  37. /*/////////////////////////////////////////////////////////////////////////////
  38. 函数名:swap
  39. 函数功能:交换数组函数
  40. 入口参数:int *a,int *b
  41. 出口参数:无
  42. /////////////////////////////////////////////////////////////////////////////*/
  43. void swap(int *a,int *b)
  44. {
  45. int t;
  46. t=*a;
  47. *a=*b;
  48. *b=t;
  49. }
  50. /*/////////////////////////////////////////////////////////////////////////////
  51. 函数名:Ascending
  52. 函数功能:判断相邻数据大小,如果前者大,升序排列需要
  53. 交换
  54. 入口参数:int *a,int *b
  55. 出口参数:无
  56. /////////////////////////////////////////////////////////////////////////////*/
  57. int Ascending(int a,int b)
  58. {
  59. if(a>b)
  60. return 1;
  61. else
  62. return 0;
  63. }
  64. /*/////////////////////////////////////////////////////////////////////////////
  65. 函数名:Ascending
  66. 函数功能:判断相邻数据大小,如果前者小,升序排列需要
  67. 交换
  68. 入口参数:int *a,int *b
  69. 出口参数:无
  70. /////////////////////////////////////////////////////////////////////////////*/
  71. int Descending(int a,int b)
  72. {
  73. if(a<b)
  74. return 1;
  75. else
  76. return 0;
  77. }

  78. /*/////////////////////////////////////////////////////////////////////////////
  79. 函数名:main
  80. 函数功能:主函数
  81. 入口参数:无
  82. 出口参数:无
  83. /////////////////////////////////////////////////////////////////////////////*/
  84. void main()
  85. {
  86. int flag;
  87. int a[N] = {12,34,21,46,89,54,26,8,6,17};//排序前的数组

  88. while(1)
  89. {
  90. printf("输入1:从小到大排序。\n请输入2:从大到小排列.\n输入3:退出!\n");
  91. scanf("%d",&flag);
  92. switch( flag )
  93. {
  94. case 1:
  95. printf("排序前的数据为:\n");
  96. Display( a , N );
  97. printf("\n");
  98. BubbleSort(a,N,Ascending);
  99. printf("从小到大排列顺序为:\n");
  100. Display( a , N );
  101. printf("\n");
  102. break;
  103. case 2:
  104. printf("排序前的数据为:\n");
  105. Display( a , N );
  106. printf("\n");
  107. BubbleSort(a,N,Descending);
  108. printf("从小到大排列顺序为:\n");
  109. Display( a , N );
  110. printf("\n");
  111. break;
  112. case 3:
  113. return;
  114. break;
  115. default:
  116. printf("输入不合法,请重新输入。\n");
  117. break;
  118. }
  119. }
  120. }

效果图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hotpower 发表于 2011-9-19 06:18 | 显示全部楼层
本帖最后由 hotpower 于 2011-9-20 00:45 编辑

学习就应该钻研。

但是没在M0上运行,不算笔记
hotpower 发表于 2011-9-20 06:25 | 显示全部楼层
看了你上传的程序大部分是控制台程序,hotisp就支持控制台回显,用它运行你的程序,
可以在windows里“不出台”
 楼主| tao560532 发表于 2011-9-21 10:17 | 显示全部楼层
哦,谢谢大叔
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:技术源于积累,成功源于执着!

31

主题

366

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部