大家好,关于交换两个数字交换很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
这是最简单的解决方案,就是先开辟一块空间,作为临时存储空间。为了方便说明,我们看一下下图:
新空间交换
首先,a和b是它们的原始值。
步骤1中,临时空间存储a的值,即10。
步骤2中,将a的值设置为b的值,即a的值已经是20。
步骤3中,将b的值设置为临时空间中存储的值,即10。
这也交换了a和b的值。缺点是需要额外的空间。
实现代码:
公共静态无效交换(int a,int b){ int tmp=a; a=b; b=tmp;} 2. 选项2
这种方法也比较简单,但是完全可以在本地操作,即不占用额外的空间来临时存储数据。我们直接看图:
加法和减法运算
显然,如图所示,第一次计算后,a和b都没有成为目标值;
步骤2中b的值已经是目标值;
第三步中,a的值也称为目标值。
理论是,如果两个数先相加,一个数等于相加之和减去它本身,即另一个数。求和的值可以说是一个基因有两个交换的数据,从中可以得到最终的值。这种有基因的数据在未来的实际业务场景中,或者分库分表中可能会有用。
实现代码:
公共静态无效交换2(int a,int b){a=a + b; b=a – b; a=a – b;} 3. 选项3
这个方法很难理解。主要使用异或运算。对于异或运算,有一个性质,如果一个数与同一个数进行两次异或,结果仍然是它本身。我们先看下图,主要看下图中数据对应的二进制:
异或运算
可以看到,获取值的步骤与第二个选项类似,只不过它具有第二个选项的优点,即计算采用位运算,这是计算机的强项,性能更好。
实现代码:
公共静态无效swap3(int a,int b){a=a ^ b; b=a^b; a=a ^ b;} 4. 小结
这三个选项中,我个人认为最后一个是最好的(这里我不会实验以上三个选项的执行效率,如果有兴趣,可以用更多的随机数据尝试一下,统计比较)。开发过程中对于一些底层的应用,使用这个方案是非常方便的,但是对于一些业务应用,我个人认为方案一更好,因为方案一的可读性更强,但是作为一个软件工程师,我个人认为认为这三种解决方案的原理还是应该知道的。
实际编码中有一个需要注意的地方,就是对于实参和行参数,在交换方法中执行行参数的值,所以如果操作时行参数是引用,则操作也会影响实际参数。请读者注意这一点。
突然想起我刚毕业的时候,正在面试一家公司。作者写出第二个方案的时候,其实说错了。我让他再研究一下,他说,这个方法不错。然后我写了第三个方案,他说错了。我一脸茫然,然后就找了个借口离开了……
由于作者知识水平有限,如有不足之处还请大家帮忙指正。如果不喜欢,请不要批评!
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/129255.html
用户评论
久爱不厌
这个算法太简单了直接点,每次看到这种基础算法都让人感慨编程原来一点也不复杂!
有13位网友表示赞同!
眷恋
讲道理,从小就学过交换数据的程序设计逻辑,这种基础算法感觉真的没有难度啊。不过把代码写成这样清晰易懂确实挺赞赏的!
有20位网友表示赞同!
秒淘你心窝
这个 swap 函数代码简洁明了,一看就很容易理解。对于初学者来说简直是福音啊!希望以后的学习也能像这么简单易用。
有12位网友表示赞同!
何年何念
交换两个数确实是一个基础操作,但这篇文章写的特别清楚,特别是加了一些实例讲解,让我一下子就能get到这个算法的核心逻辑。点赞!
有6位网友表示赞同!
千城暮雪
感觉这个 swap 函数挺好用的,在一些排序或者数据结构的操作中都很有用啊,比如冒泡排序什么的。
有6位网友表示赞同!
夜晟洛
对于简单的操作建议能再详细一点好吗?比如在这个函数的执行过程中涉及到哪些底层指令和寄存器操作等等。这样就能更深入地理解了
有10位网友表示赞同!
幸好是你
这种基础算法确实很多资源都会介绍它啊,但是这篇文章写的很清晰很好理解,尤其适合小白学习!
有16位网友表示赞同!
心安i
这个 swap 函数真的太常见了!几乎是在任何编程语言中都能找到它,感觉学习其他语言的时候可以先上手练习这个基本的函数。
有9位网友表示赞同!
面瘫脸
就个人而言,我对这个算法的实现方式没什么兴趣,毕竟太常用啦,想看到更多高级程序设计思路的分享吧。
有18位网友表示赞同!
孤单*无名指
文章写的非常浅层,没有太多实际应用场景的讲解,有点乏味啊
有6位网友表示赞同!
凝残月
我觉得交换两个数的方法有很多种,除了这种简单的解题思路之外,还有其他更灵活和高效的方法,比如位运算或者其他的算法设计等等。这个文章比较单薄啊!
有13位网友表示赞同!
早不爱了
对于初学者来说,学习基础算法很有必要,就像这篇文章一样简单易懂的讲解,就能让我们快速掌握这些知识点。希望能看到更多类似的文章分享!
有11位网友表示赞同!
你与清晨阳光
While the concept of swapping numbers is fundamental, this article does a great job outlining the code and providing examples. It's especially helpful for beginners. 👍
有10位网友表示赞同!
病房
I wish there were more examples demonstrating how the swap function can be used in real-world scenarios. Understanding its practical applications would make it even more valuable.
有16位网友表示赞同!
灼痛
Good explanation! It's nice to see a clear and concise article on such a fundamental programming concept. Keep up the good work! 💻
有5位网友表示赞同!