vlambda博客
学习文章列表

【简单算法】冒泡排序--真的很简单!

【简单算法】冒泡排序--真的很简单!
【简单算法】冒泡排序--真的很简单!

mao


pao


pai


xu


【简单算法】冒泡排序--真的很简单!
【简单算法】冒泡排序--真的很简单!


01

都有什么排序方法?


【简单算法】冒泡排序--真的很简单!

02

冒泡排序介绍


【简单算法】冒泡排序--真的很简单!


冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的大小比较结果不符合要求就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故而得名冒泡排序。


【简单算法】冒泡排序--真的很简单!




03

算法详解(Java)

首先新建一个int类型的数组;

public class BubbleSort { public static void main(String[] args) { int[] x = {1,5,8,4,6,13,66,100,22,73}; }}
数组中放置了10个数字,我们需要从小到大进行排序并输出,让我们将复杂问题进行拆解,分解为若干个小问题逐步解决。
  • 如何交换两个数字位置?

  • 要循环多少次?

先解决第一个问题,如何交换两个数字的位置? 可能有朋友会说新建一个临时变量temp作为中转,这样就能交换啦! 就像下面这样:
int temp = 0;int i = 1;int y = 2;
temp = i;i = y;y = temp;

可是感觉有点繁琐的样子,那么能不能不要新建变量从而达到交换的目的呢?答案是可以的!

朋友们可以带入进去算一下,并稍微理解思考一段时间,相信你们会很容易的理解。

int a = 1;int b = 2;a = a + b;b = a - b;a = a - b;

第一个问题解决了,那么接下来思考要循环多少次的问题了!
我们再把上面的GIF拿下来看看:

【简单算法】冒泡排序--真的很简单!


我们发现,每当将最大的移动到最后,便是一个大的循环,那么我们仔细想一下,如果一共有10个数字需要排序,总共需要多少次的大循环呢?答案是9次即可,第一次我们可以找出最大的数字,放置最后,第二次可以找出第二大的数字放置倒数第二位置上,依次下去,直到第9次,排出第二小的数字放置在了第二个位置上,此时还剩一个最小的数字,也没有必要排序了。因此大循环需要9次。通过以下代码可以完成:

for (int i = 0; i < arrays.length-1; i++){//执行代码}
外部大循环完成了,那么小循环呢?我们一层层的分析,在第一次大循环的时候,我在其内部再加一个for循环遍历数组,它的当前位与后一位进行比较,如果大于后面一位,则交换数据,否则继续,那么它应该循环几次呢?我们稍微思考一下。
代码如下:
for (int i = 0; i < arrays.length-1; i++) {    for (int j = 0; j < arrays.length-1-i; j++) {        if(arrays[ j ] > arrays[ j+1 ]){ arrays[ j ] = arrays[ j ] + arrays[ j + 1];             arrays[ j+1 ] = arrays[ j ] - arrays[ j + 1];             arrays[ j ] = arrays[ j ] - arrays[ j + 1];       }    }}

为什么第二层的for循环要 arrays.length-1-i呢?
是因为当我们每循环完一次,都会有一个数字被放入正确的位置,那么我们的第二重for循环就不必再循环9次了,只需循环9减去已经归位数字的数量即可。

完整代码以及结果:

public class BubbleSort { public static void main(String[] args) { int[] arrays ={1,5,8,4,6,13,66,100,22,73}; for (int i = 0; i < arrays.length-1; i++) { for (int j = 0; j < arrays.length-1-i; j++) { if(arrays[j]>arrays[j+1]){ arrays[ j ] = arrays[ j ] + arrays[ j + 1]; arrays[ j+1 ] = arrays[ j ] - arrays[ j + 1]; arrays[ j ] = arrays[ j ] - arrays[ j + 1]; } } } for(int i : arrays){ System.out.println(i); } }}

【简单算法】冒泡排序--真的很简单!


希望各位读者能有所获益


【简单算法】冒泡排序--真的很简单!



编辑|zah

审核|zah