数据结构与算法(一) 交换
- 这里所有的算法都不涉及到语言,各种语言中的差别需要读者自行体验,当然也会偶尔涉及
交换
- 交换是我们在编写程序时,所用到的最为常用的算法之一,但是就是这简单的算法也让人们回味无穷
- 首先交换的本质是相同的,下面提供两种交换的思路
- 原本的两个空间的值和第三个空间的值进行交换
“`c
void swap_p(int *a,int *b)
{
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
- 原本的两个空间的值和第三个空间的值进行交换
这里使用的是C语言中的指针,(注意这里是值交换)
* 利用运算符和计算机的存储特性,就可以轻松交换我们想要交换的值
```c
void swap_pn(int *a,int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
这里是利用异或运算(相同为1,不同为0),这些值在计算机中存储为一个二进制的序列。
这里我们的加减法运算也可以达到相同效果
void swap_pn(int *a,int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
这里是完整版代码
#include<stdio.h>
#include<stdlib.h>
#include "tool.h"
//声明
void swap(int a,int b);
void swap_p(int *a,int *b);
void swap_pn(int *a,int *b);
void main11()
{
int a = 3;
int b = 4;
int c = 0;
swap(a,b);
printf("swap function:a:%d,b:%d\n",a,b);
swap_p(&a,&b);
printf("swap_p function:a:%d,b:%d\n",a,b);
swap_m(a,b,c);
printf("swap_m macro:a:%d,b:%d\n",a,b);
swap_pn(&a,&b);
printf("swap_pn macro:a:%d,b:%d\n",a,b);
system("pause");
}
void swap(int a,int b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
void swap_p(int *a,int *b)
{
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
void swap_pn(int *a,int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}