算法基础之冒泡排序

Posted 琪姐的小屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础之冒泡排序相关的知识,希望对你有一定的参考价值。

冒泡排序是一种用于排序的算法基础。那么它为什么叫冒泡排序呢?是因为越小的数据经过排序会浮到数列的顶端。

一、冒泡排序原理

1.依次比较相邻的两个数据,较小的放到前面,较大的放到后面。

2.循环依次比较,直到所有数据从小到大依次排序。

二、冒泡排序的时间复杂度

1.当数列为正序时,只需要依次检查一遍,所以最小时间复杂度为O(n - 1)

2.当数列为逆序时,我们想将第一个数移到需要检查n遍,所以最大时间复杂度为O(n(n - 1))

3.所以冒泡排序的平均时间复杂度为O(n2)

三、图解

如果数据3小于数据2,则

算法基础之冒泡排序

执行第一步

算法基础之冒泡排序

执行第二步

执行第三步

四、代码实现

public int[] BubbleSort(int[] num){ while (true) {    boolean b = false;    for (int i = 0, len = num.length - 1; i < len; i++)    {      if (num[i] > num[i + 1])      {       int tem = num[i + 1];        num[i + 1] = num[i];        num[i] = tem;        b = true;      }    }    if (!b)    {      break;    }  }}

先来解释一下上面的代码

b为真时代表程序执行了排序,所以需要再检查一次。

b为假时代表程序执行检查。

如果我们进行了检查且不需要排序时,通过break关键字,跳出循环。

为什么要这么写呢?因为要检查直到所有完成为止,所以最多也就检查n次。但是for循环要写三部分,而while循环只需要一部分,一个true就好了。因为我们一定会通过break跳出循环,那么,还需要用for来指定它的最多循环次数吗?

上面代码中。temtemporary,是暂存的意思。还记得上面的图解吗?在相邻的两个数据中,当后面的数据小于前面的数据时:

用一个变量暂存后面变量的数据;

将前面变量的数据赋给后面的变量;

将暂存的数据赋给前面的变量。

以上是关于算法基础之冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

java基础之冒泡排序

基础排序算法之冒泡排序

算法基础之冒泡排序

排序算法之冒泡排序

十大排序算法之冒泡排序

算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序