【Java入门100例】04.三数排序——两数交换高级算法

395 阅读2分钟

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

点赞再看,养成习惯。关注这个在互联网摸爬滚打的程序员。

🌲本文收录于专栏《Java入门练习100例》——试用于学完「Java基础语法」后的巩固提高及「LeetCode刷题」前的小试牛刀。

题目描述

难度:简单

用if语句实现a、b、c的值按从小到大排序

知识点

  • if判断
  • 两数交换

解题思路

1.if判断

本题整体的思路就是比较 - > 交换

if作为一种分支结构,用来根据判断条件的不同做不同的后续处理。

结构

if(){

}else if(){

}else{

}

注意:一旦进入其中一个else if其他分支将不再执行。

2.两数交换

通常的做法,好比交换两个杯子的水,需要先找来一个空杯子,也就是一个临时变量存值。代码如下:

int t=a;
a=b; 
b=t;

高级做法,不使用其他变量如何做?思考🤔一下,文末给出答案。

代码实现

/**
 * 用if语句实现a、b、c的值按从小到大排序
 */
public class question_04 {
    public static void main(String args[]){
        int a=9,b=5,c=7,t;
        if(a>b) {
            t=a; a=b; b=t;
        }
        if(a>c) {
            t=a; a=c; c=t;
        }
        if(b>c) {
            t=b; b=c; c=t;
        }
        System.out.println("a="+a+",b="+b+",c="+c);
    }
}

输出结果

总结

如何不用其他变量交换两个数的值?

答,将两个数做加/乘法。在做减/除法。代码如下:

a=a*b;
b=a/b; //等价于 a*b/b=a,即将a的值赋给了b
a=a/b; //等价于 a*b/a=b,即将b的值赋给了a

加减的方式留给大家去实现。

这里注意一点,一般在实际开发中,我们除了要考虑代码的时间复杂度,还要考虑代码的可读性。所以是用基本方法还是优化方法需要综合考虑。

最后,如果文章对你有帮助。

记得给文章点个赞呀!

有空欢迎来看看,分享大厂面试和算法刷题,期待和你成为朋友。