PX-18-交换变量的时空分析

1.时空复杂度的问题:

  •  运算和赋值都算一次时间复杂度
  •  数据越界的问题
    int a = 10;
    int b = 5;
    //
    printf("a=%d,b=%d", a, b);
    /*a = b;
    b = a;*/
    //评估时空复杂度, temp增加空间1, 时间3次

    //int temp = a;//temp=10,a=10,b=5
    //a = b;     //b=5,a=5,temp=10
    //b = temp;//b=10,a=5,temp;
    //空间0,    //赋值3次,+3次
     
  
//+ -- * //
a = a +b;     //a=15,b=5
    b = a + b;     //b=10,a=15 a = a + b; //a=5,b=10
    //+ - * / (加减乘除运算)会导致数据越界, 最安全的做法是异或

  //位运算 "异或^"
a = a ^ b; //a=15,b=5 b = a ^ b; //b=10,a=15 a = a ^ b; //a=5,b=10

 

2.

代码

#include<stdio.h>
#include<stdlib.h>

void main()
{
    int a = 10;
    int b = 5;
    //
    printf("a=%d,b=%d", a, b);
    /*a = b;
    b = a;*/
    //评估时空复杂度, temp增加空间1, 时间3次

    //int temp = a;//temp=10,a=10,b=5
    //a = b;     //b=5,a=5,temp=10
    //b = temp;//b=10,a=5,temp;

    //空间0,    //赋值3次,+3次
                                    //+ --  * //
    a = a ^ b;     //a=15,b=5
    b = a ^ b;     //b=10,a=15
    a = a ^ b;      //a=5,b=10
    //+ -  * /会数据越界, 最安全的做法是异或
    // 99
    //100

    //11,00,0,  10,01,1

    printf("\na=%d,b=%d", a, b);

    getchar();

}

 

posted @ 2016-12-12 14:35  silvercell  阅读(1629)  评论(0)    收藏  举报