刚下了最新版啊哈C编程入门书。读完第三章第六节,不禁对该节算法的修正叫好!然而紧跟着的第七节排序算法一却又犯了老错误:若输入的三个数全相等,则将输出六次排序后的结果;若三个数中有两个相等,则将输出两次。不得不说是一大遗憾啊。我写了段代码,将修正前后的算法针对七种相等情况做对比验证,证明修正后的算法输出正常,即均只有一次。希望下个版本能改进
代码如下:- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- int a,b,c;
- int i=1;
- while (i<8)
- {
- printf("\n第 %d 次。请输入三个整数,以逗号分隔:\n",i++);
- scanf("%d,%d,%d",&a,&b,&c);
- printf("书上的算法:\n");
- if (a>=b && b>=c) printf("a,b,c\t%d\t%d\t%d\n",a,b,c);
- if (a>=c && c>=b) printf("a,c,b\t%d\t%d\t%d\n",a,c,b);
- if (b>=a && a>=c) printf("b,a,c\t%d\t%d\t%d\n",b,a,c);
- if (b>=c && c>=a) printf("b,c,a\t%d\t%d\t%d\n",b,c,a);
- if (c>=a && a>=b) printf("c,a,b\t%d\t%d\t%d\n",c,a,b);
- if (c>=b && b>=a) printf("c,b,a\t%d\t%d\t%d\n",c,b,a);
-
- printf("\n改进后的算法:\n");
- if (a>=b && b>=c) printf("a,b,c\t%d\t%d\t%d\n",a,b,c);
- if (a>=c && c>b) printf("a,c,b\t%d\t%d\t%d\n",a,c,b);
- if (b>a && a>=c) printf("b,a,c\t%d\t%d\t%d\n",b,a,c);
- if (b>=c && c>a) printf("b,c,a\t%d\t%d\t%d\n",b,c,a);
- if (c>a && a>=b) printf("c,a,b\t%d\t%d\t%d\n",c,a,b);
- if (c>b && b>a) printf("c,b,a\t%d\t%d\t%d\n",c,b,a);
- }
- return 0;
- }
复制代码 |