算法基础之冒泡排序
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来指定它的最多循环次数吗?
上面代码中。tem是temporary,是暂存的意思。还记得上面的图解吗?在相邻的两个数据中,当后面的数据小于前面的数据时:
用一个变量暂存后面变量的数据;
将前面变量的数据赋给后面的变量;
将暂存的数据赋给前面的变量。
以上是关于算法基础之冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章