经典算法学习——交换两个整型数据

Posted 乞力马扎罗的雪CYF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法学习——交换两个整型数据相关的知识,希望对你有一定的参考价值。

       交换两个数是在编程中经常会用到的,当然我们可以用很常见的方式来实现,也可以各种稀奇古怪的方法来做。这里我们用三种比较常规的方式来做,太过古怪的方法个人觉得没有太大必要。实例代码上传至:https://github.com/chenyufeng1991/SwapFunction

(1)使用指针

实现如下:

//
//  main.c
//  SwapFunc
//
//  Created by chenyufeng on 16/2/3.
//  Copyright © 2016年 chenyufengweb. All rights reserved.
//

#include <stdio.h>

void swap01(int *a,int *b);

int main(int argc, const char * argv[]) {

    int a = 1;
    int b = 2;
    printf("交换前:a = %d,b = %d\\n",a,b);
    swap01(&a, &b);
    printf("交换后:a = %d,b = %d\\n",a,b);

    return 0;
}

//最常规的交换;
void swap01(int *a,int *b){

    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}



(2)不借用第三个数

//
//  main.c
//  SwapFunc
//
//  Created by chenyufeng on 16/2/3.
//  Copyright © 2016年 chenyufengweb. All rights reserved.
//

#include <stdio.h>

void swap02(int *a,int *b);

int main(int argc, const char * argv[]) {

    int a = 1;
    int b = 2;
    printf("交换前:a = %d,b = %d\\n",a,b);
    swap02(&a, &b);
    printf("交换后:a = %d,b = %d\\n",a,b);

    return 0;
}

//不用第三个数;
void swap02(int *a,int *b){

    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}



(3)异或

//
//  main.c
//  SwapFunc
//
//  Created by chenyufeng on 16/2/3.
//  Copyright © 2016年 chenyufengweb. All rights reserved.
//

#include <stdio.h>

/**
 *  由于我这里用的是C语言,所以不能使用引用。C++中可以使用引用。
 引用的函数定义:
 void swap04(int &a,int &b){
 ...
 }
 */

void swap03(int *a,int *b);

int main(int argc, const char * argv[]) {

    int a = 1;
    int b = 2;
    printf("交换前:a = %d,b = %d\\n",a,b);
    swap03(&a, &b);
    printf("交换后:a = %d,b = %d\\n",a,b);

    return 0;
}

//异或,使用二进制位进行计算;
void swap03(int *a,int *b){

    *a = *a ^ *b;
    *b = *b ^ *a;
    *a = *a ^ *b;
}



上面三种实现大家应该是应该闭着眼睛都能写出来的,也是能够完全理解的。

说明一下:在C语言中,声明一个函数,不实现也不调用,那么不会出现任何问题。如果仅仅只是声明然后调用了,那么就会报错(必须要有实现)。


本文参考:http://blog.csdn.net/morewindows/article/details/6671824


以上是关于经典算法学习——交换两个整型数据的主要内容,如果未能解决你的问题,请参考以下文章

经典算法学习——冒泡排序

C语言100个经典算法源码片段

经典排序算法学习笔记之一——冒泡排序

不利用临时变量,交换两个变量的值

Python十大经典算法之冒泡排序

经典算法学习——链表实现冒泡排序