C语言效率问题-两个整型数的交换我想问两个个有关两种写法或算法的运行效率问题,就是哪个运行结束的最快,哪个运行结束的最慢.首先是第一个:交换两个整型数的值,a和b 第一种方法是:i

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 22:13:10
C语言效率问题-两个整型数的交换我想问两个个有关两种写法或算法的运行效率问题,就是哪个运行结束的最快,哪个运行结束的最慢.首先是第一个:交换两个整型数的值,a和b 第一种方法是:i

C语言效率问题-两个整型数的交换我想问两个个有关两种写法或算法的运行效率问题,就是哪个运行结束的最快,哪个运行结束的最慢.首先是第一个:交换两个整型数的值,a和b 第一种方法是:i
C语言效率问题-两个整型数的交换
我想问两个个有关两种写法或算法的运行效率问题,就是哪个运行结束的最快,哪个运行结束的最慢.
首先是第一个:
交换两个整型数的值,a和b
第一种方法是:
int c = 0;
c = a;
a = b;
b = c;
第二种方法是:
a = a + b;
b = a - b;
a = a - b;
第三种方法是:
a=a+b-(b=a);
三种方法都能实现整数a和b的交换,请问哪个方法运行结束时间最短,那种方法运行结束时间最长,并请附上原因.

C语言效率问题-两个整型数的交换我想问两个个有关两种写法或算法的运行效率问题,就是哪个运行结束的最快,哪个运行结束的最慢.首先是第一个:交换两个整型数的值,a和b 第一种方法是:i
说到交换效率,就必须涉及到硬件.在32位机器中,数据寄存器(AX,BC,CX,DX,EX等)都是32位的,在这类机器中,int类型的数据也是32位的,这就是int类型操作最为简洁方便的原因.
加法的操作是,取数到寄存器(两次,一次是被加数,另一次是加数),实施加法运算,并将结果存储到指定地址单元,减法操作于此类似.
赋值操作是,取数,存数.
通常,取存数操作的时间消耗高于寄存器操作,故假定,寄存器加、减操作的时间消耗为1,存储器取存操作的时间消耗为2,依次累计以上三种交换操作来比较优劣,注意这里用的是int类型数据的操作,浮点型数据操作校友区别.
方法1:int c = a; a = b; b = c;
2 + 2 + 2 = 8
方法2:a = a + b; b = a - b; a = a - b;
3 × (2 + 2 + 1) = 15
方法3:a = a + b - (b = a); // 貌似不能完成交换操作?
2 + 2 + 2 + 2 + 1 + 1 = 10
由此可见,方法1最为高效.