标准程序是这样的:
标准程序执行结果没有问题,那么改变比较顺序执行结果怎么样呢?
先比较a和b,之后比较b和c,最后比较a和c。程序如下:
但是,当运行之后的结果却是这样的:
这是为什么呢?
书中对于正确答案的解释是这样的:
这段话的意思是a是三个数里面两两比较较小的数,但是调换顺序之后先比较a和b,a最后是较小的数,再比较b和c,b是较小的数,但是并不能保证a和b的大小关系。如果用数字过程来解释就是这样的:
a=34;b=5;c=1;
a和b比较之后的结果是:
a=5;b=34;
b和c比较之后的结果是:
b=1;c=34;
此时b是小于a的,但是接下来比较a和c:
a=5;c=34;
所以结果是5134。
原因在于没有连续确定同一个数是较小的数,正确程序前两次比较都是确定a是较小的数,最后在两个较大的数b,c之中进行比较,后面调换后的程序是前两次分别确定出两个较小的数,但是不知道到底谁更小,之后也没有比较谁更小,所以出错。
总结:比较大小只能先确定同一个数是两两比较之后都较小的数,之后再进行比较其他的,如果不连续的比较可能会出错。