zoukankan      html  css  js  c++  java
  • 两数交换

    在排序算法中,我们经常需要交换两个数的值, 在进入算法之前,先在这里复习一下两数交换的实现方法,算是开胃小菜。

    实现1

    最简单的也是最常用的实现:

       1: void swap(int *a, int *b)
       2: {
       3:     int temp = *a;
       4:     *a = *b;
       5:     *b = temp;     
       6: }

    然而面试官们常常并不满意这样的实现,他们很有可能要求我们不能使用其它内存,那么又有了下面两个实现方法。

    实现2:

    异或:

       1: void swap(int *a, int *b)
       2: {
       3:     *a = *a ^ *b;
       4:     *b = *a ^ *b;    
       5:     *a = *a ^ *b;
       6: }

    实现3:

    利用赋值操作符:

       1: void swap(int *a, int *b)
       2: {
       3:     *a = *a + *b - (*b = *a);
       4: }

    看到实现3,警觉的同学常常会担心溢出的问题,事实是在这里不会有这种情况,我们可以写代码测试一下:

       1: void swap(unsigned int *a, unsigned int *b)
       2: {
       3:     *a = *a + *b - (*b = *a);
       4: }
       5:  
       6:  
       7: int
       8: main(int argc, char **argv)
       9: {
      10:     unsigned int a = 0xffffffff, b = 0xfffffffe;
      11:     
      12:     swap(&a, &b);
      13:     printf("a=%x, b=%x\n", a, b);
      14:     
      15:     return 0;
      16: }

    运行结果:

       1: a=fffffffe, b=ffffffff
       2: 请按任意键继续. . .

    很好,安全无侧漏,可以放心使用。

  • 相关阅读:
    5、面试题-测试用例篇
    4、面试题-技术篇
    3、面试题-测试流程
    2、面试题-接口测试用例
    全屏圆角弹出框
    Jquery的each退出循环
    拖动DIV
    head里面的其他标记
    更新字段
    Python---序列化
  • 原文地址:https://www.cnblogs.com/newth/p/2476803.html
Copyright © 2011-2022 走看看