c语言-交换两个整数

使用c来写一个函数来实现交换两个整数。

第一种

一般的方法,引用中间变量,方便快捷。

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

第二种

void swap(int *a, int *b)
{
    int tmp = *a + *b;
    *b = tmp - *b;
    *a = tmp - *b;
}

tmp虽然可能会溢出,但是依然能够达到交换的效果。

上面的都是引用了中间变量,再看看不使用中间变量的方法。

不使用中间变量虽好,但是如果a,b的值一样,说明交换的是同一个变量,执行之后的操作就会出现问题。

第三种

void swap(int *a, int *b)
{    if(a == b){        return;    }
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

第四种

void swap(int *a, int *b)
{    if(a == b){        return;    }
    *a = *a - *b;
    *b = *a + *b;
    *a = *a - *b;
}

第五种

void swap(int *a, int *b)
{    if(a == b){        return;    }
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

一般来说使用位操作比加减运算要快

第六种

void swap(int *a, int *b)
{    if(a == b){        return;    }
    *a = *a * *b;
    *b = *a / *b;
    *a = *a / *b;
}

这种方法虽然很搓,但也是一种方法。。。

第七种

 1 void swap(void *a, void *b, int length)
 2 {
 3     void *tmp = malloc(length);
 4     if(tmp == NULL){
 5         fprintf(stderr, "the memory is full \n");
 6         exit(1);
 7     }
 8     memcpy(tmp, a, length);
 9     memcpy(a, tmp, length);
10     memcpy(b, a, length);
11     free(tmp);
12     tmp = NULL;
13 }

第七种是一种通用的写法,可以用于任何类型的变量的交换。前提,这两个变量所占空间一样

时间: 2024-10-25 01:53:25

c语言-交换两个整数的相关文章

使用指针交换两个整数的值

#include<stdio.h>void change_1(int a, int b);void change_2(int *a, int *b); int main(){ int a = 10; int b = 20; printf("changed before:"); printf("a=%d\tb=%d\n", a, b); change_1(a,b); printf("changed 1 affter:"); printf

交换两个整数的三种方法

package com.zby.bubble; /** * <class description> 三种方法交换两个整数的值 * * @author zby * */ public class Exchange { public static void main(String[] args) { splitLine(); exchange1(Integer.MAX_VALUE, Integer.MAX_VALUE - 1); exchange1(99, 100); exchange1(Inte

算法学习 - 不申请第三个数交换两个整数的值

交换两个数 正常情况我们需要多申请一个变量来交换两个数的值(假设变量为a, b).例子如下: int temp = a; a = b; b = temp; 这样子就可以了.但这终究是一种需要申请临时变量的方法,总要去想想临时变量的名字.下面主要介绍两种方法. 直接运算 这种办法简单明了,也是我最喜欢使用的办法,因为即使是浮点型也可以用这种办法,继续假设两个变量是a和b. a = a+b; b = a - b; a = a - b; 这样就交换了!是不是很简单.一下没懂的可以找个例子去试试. 逻辑

C语言求两个整数的最大公约数

------------------------------------------------------------------------------------------------------ 最大公约数(又叫最大公因数):指两个或者多个整数共有约数中最大的一个.求最大公约数有多种方法,常见的有质因数分解法.短除法.辗转相除法.更相减损法.在这里本人建议使用后两种方法实现. -------------------------------------------------------

C语言将两个整数数组合并为一个数组

下面给定两个排序号的整数数组,将他们合并为一个数组并重新排序. #include <stdio.h> #define NMAX 10 void printIntArray(int a[], int n); void merge(int c[], int *nc, int a[], int na, int b[], int nb); int main(void) { int x[NMAX] = {1,3,5,6,7}; // 第一个排序好的数组 int y[NMAX] = {2,3,4}; //

一个BUG?Visual Studio 2017 C++编写交换两个整数

想用一句话搞定交换: 1 int a = 2, b = 5; 2 cout << "a = " << a << ", b = " << b << endl; 3 a = (a + b) - (b = a); 4 cout << "a = " << a << ", b = " << b << endl; 然而输

交换两个整数

一.使用临时变量 C版本: void swap(int* a, int* b) { int temp = 0; temp = *a; *a = *b;void swap(int& a, int& b){int temp = 0;temp = a;a = b;b = temp;} *b = temp; } C++版本: void swap(int& a, int& b) { int temp = 0; temp = a; a = b; b = temp; } 二.不使用临时变

三种交换两个整数的方法

交换 int a, int b 1.最弱的方法 1 void swap(int &a,int &b) 2 { 3 int c = a; 4 a = b; 5 b = c; 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; 4 b =a^ b; //(=

C语言--交换两个变量值,不使用其他变量

#include <stdio.h> int main(int argc, const char * argv[]) { int a = 3, b = 4; printf("a = %d, b = %d\n", a, b); /* 1.加减法 a = b - a; b = b - a; // b - (b - a) = a a = b + a; // a + b - a = b printf("a = %d, b = %d\n", a, b);*/ //