鱼C论坛

 找回密码
 立即注册
查看: 3536|回复: 5

[技术交流] 两种不同的冒泡算法————测试

[复制链接]
发表于 2011-8-2 16:16:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 linha0 于 2011-8-3 12:34 编辑
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. #define ARRAY struct arrayInt

  5. //定义结构体
  6. struct arrayInt
  7. {
  8.         int *array;                        //数组
  9.         int count;                        //数组的个数
  10. };

  11. int main(void)
  12. {
  13.         void setArrayInt(ARRAY *arr);
  14.         void sort(ARRAY *arr,int k);
  15.         ARRAY array;
  16.         char ch;
  17.         int k;
  18.         
  19.         do
  20.         {
  21.                 //设置新的数组
  22.                 setArrayInt(&array);
  23.                
  24.                 do
  25.                 {
  26.                         printf("\n\n0.从小到大排列\n");
  27.                         printf("1.从大到小排列\n");
  28.                         printf("请选择: ");
  29.                         scanf ("%d",&k);
  30.                         
  31.                         //对数组进行冒泡排序
  32.                         sort(&array,k);
  33.                         
  34.                         printf("\n是否重新选择排序方式(Y/N):");

  35.                         while(getchar()!='\n');
  36.                         scanf("%c",&ch);

  37.                 }while('y'==ch||'Y'==ch);
  38.                
  39.                 free(array.array);

  40.                 printf("\n是否重新开始(Y/N):");
  41.                 while(getchar()!='\n');
  42.                 scanf("%c",&ch);
  43.         }while('y'==ch||'Y'==ch);
  44.         
  45.         system("pause");
  46.         return 0;
  47. }

  48. //输出数组
  49. void ArrIntPrint(int *ar,int n)
  50. {
  51.     int i=0;
  52.     for(;i<n;i++)
  53.     {
  54.         printf("%5d",*ar++);
  55.     }

  56.     printf("\n");
  57. }

  58. //检查是否输入数字
  59. void scanInt(int *n)
  60. {
  61.         while(!scanf("%d",n))
  62.         {
  63.                 printf("请输入数字!\n");
  64.                 while(getchar()!='\n');
  65.         }
  66. }

  67. //设置要测试的数组
  68. void setArrayInt(ARRAY *arr)
  69. {
  70.         int i=0;
  71.         
  72.         printf("请输入数组的元数个数:");
  73.         scanInt(&arr->count);
  74.         arr->array=(int *)malloc(sizeof(int)*arr->count);
  75.         
  76.         //设置数组元数。
  77.     for(;i<arr->count;i++)
  78.     {
  79.                 printf("请输入第%d个元数:",i);
  80.                 scanInt(arr->array+i);
  81.     }
  82.         
  83.         printf("\n当前数组元数分别为:\n\n");
  84.         ArrIntPrint(arr->array,arr->count);
  85. }

  86. //对数组进行排序
  87. void sort(ARRAY *arr,int k)
  88. {
  89.         int *ai,*aj,i=0,j=0;
  90.         
  91.         if(k)
  92.         {//冒泡算法1:降序排序
  93.                 for(;i<arr->count-1;i++)
  94.                 {
  95.                         ai=arr->array+i;
  96.                         for(j=i+1;j<arr->count;j++)
  97.                         {
  98.                                 aj=arr->array+j;
  99.                                 if(*ai<*aj)//符合条件就交换
  100.                                 {
  101.                                         *ai^=*aj;
  102.                                         *aj^=*ai;
  103.                                         *ai^=*aj;
  104.                                 }
  105.                         }
  106.                 }
  107.                 printf("\n数组从大到小排列为:\n\n");
  108.         }else
  109.         {//冒泡算法2:升序排序
  110.                 for(;i<arr->count-1;i++)
  111.                 {
  112.                         for(j=0;j<arr->count-i-1;j++)
  113.                         {
  114.                                 ai=arr->array+j;
  115.                                 aj=arr->array+j+1;
  116.                                 if(*ai>*aj)
  117.                                 {
  118.                                         *ai^=*aj;
  119.                                         *aj^=*ai;
  120.                                         *ai^=*aj;
  121.                                 }
  122.                         }
  123.                 }
  124.                 printf("\n数组从小到大排列为:\n\n");
  125.         }
  126.         
  127.         //输出已排序的数组
  128.         ArrIntPrint(arr->array,arr->count);
  129. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 22:50:33 | 显示全部楼层
把函数写到结构体中,利用结构体实现面向对象的思想,不知道这样做会不会更好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-3 08:34:36 | 显示全部楼层
新人来学习!顶楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 12:36:28 | 显示全部楼层
冒泡算法1:为往前冒泡
冒泡算法2:为往后冒泡
:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-7-2 17:21:24 | 显示全部楼层
看帖,就必须回帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-2 17:38:43 | 显示全部楼层
新人学习,顶下!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-5 10:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表