冒泡排序的基本概念
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面,如此继续直到最后一个数;然后再从头开始,一直到倒数第二个数;如此循环一直到排序完成。
稍微想一下
基本概念已经很清楚了,我稍微的想了一下。如果用程序来实现的话,比较直观的方法就是用for循环。一开始时可以设置一个变量index,让index=0,也就是每次都从0开始循环,比较index和index+1的值,如果index的值大于index+1的值,就将它们互换,然后让index++,一直比较到最后两个值;一轮完成后,再重新让index为0,重新从0开始循环,依旧上面的逻辑,只不过这次只循环到倒数第二个值就好了;以此类推。
有了上面的想法,我很直观的写出下面的代码:(这里没有Scala代码框,我就用Java的代替了)
这个代码可以用来做第一次循环,那么问题来了:之后的循环怎么办?包括我该怎么控制一轮的循环以及每一轮循环中for循环的上边界,毕竟每一轮for循环的上边界都是不同的。
去掉for循环
网上最推崇的方法是用嵌套for循环的方法,自己对for循环不是很喜欢,更何况for循环嵌套for循环的做法。所以我的想法是去掉for循环。就连上面代码中的那一层也不要。当然,去掉for用while来代替等于什么也没做,因此,我只能用递归来做了。
用递归的话,我可以把上面的代码改造一下,把用来控制循环的数组索引变量i作为方法参数,这样我可以在递归调用方法时,每次把索引i加1作为参数来代替for循环。
OK,改造完就是下面的代码: