重温基础算法内部排序之冒泡排序法
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重温基础算法内部排序之冒泡排序法相关的知识,希望对你有一定的参考价值。
内部排序之冒泡排序法
文章目录
冒泡排序(Bubble Sort)也是一种简单快速的排序算法。它重复地遍历过要排序的数列,一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
主要思想
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了本次遍历确定的最后一个值。
- 重复上面的步骤,直到没有任何一对数字需要比较。
过程演示
动图制作:
算法动画网址:https://visualgo.net/zh/sorting
gif录屏软件:GifCam 下载地址:https://download.csdn.net/download/weixin_43820556/86512977
-
第1趟排序
从数组下标0开始,不断与相邻的比较与交换,确定最大值9,并移动到了数组最后的位置
第1次排序后: 6 7 3 1 5 2 4 8 9
-
第2趟排序
从数组下标0开始,不断与相邻的比较与交换,确定最大值8,并移动到了数组最后的位置-1
第2次排序后: 6 3 1 5 2 4 7 8 9
-
第3趟排序
从数组下标0开始,不断与相邻的比较与交换,确定最大值7,并移动到了数组最后的位置-2
第3次排序后: 3 1 5 2 4 6 7 8 9 -
第4趟排序
从数组下标0开始,不断与相邻的比较与交换,确定最大值6,并移动到了数组最后的位置-3
第4次排序后: 1 3 2 4 5 6 7 8 9
-
第5趟排序
从数组下标0开始,不断与相邻的比较与交换,确定最大值5,并移动到了数组最后的位置-4
第5次排序后: 1 2 3 4 5 6 7 8 9 -
此时数组已经完成了排序。从第6~8趟排序的排序其实可以忽略。
JAVA代码
package sort;
public class BubbleSort
public static void main(String[] args)
int[] o = 7, 6, 9, 3, 1, 5, 2, 4, 8;
System.out.print("排序前: ");
for (int t : o)
System.out.print(t);
System.out.print(" ");
System.out.println();
// 算法部分
for (int i = 1; i < o.length; i++)
// flag代表数组是否已经有序,当不发生元素交换时,代表数组有序了
boolean flag = true;
for (int j = 0; j < o.length - i; j++)
if (o[j] > o[j + 1])
int tmp = o[j];
o[j] = o[j + 1];
o[j + 1] = tmp;
flag = false;
// 数组已经有序,跳过无效的循环
if (flag)
break;
System.out.print("第" + i + "次排序后: ");
for (int t : o)
System.out.print(t);
System.out.print(" ");
System.out.println();
System.out.print("排序后: ");
for (int t : o)
System.out.print(t);
System.out.print(" ");
System.out.println();
执行结果 不用flag
排序前: 7 6 9 3 1 5 2 4 8
第1次排序后: 6 7 3 1 5 2 4 8 9
第2次排序后: 6 3 1 5 2 4 7 8 9
第3次排序后: 3 1 5 2 4 6 7 8 9
第4次排序后: 1 3 2 4 5 6 7 8 9
第5次排序后: 1 2 3 4 5 6 7 8 9
第6次排序后: 1 2 3 4 5 6 7 8 9
第7次排序后: 1 2 3 4 5 6 7 8 9
第8次排序后: 1 2 3 4 5 6 7 8 9
排序后: 1 2 3 4 5 6 7 8 9
执行结果 使用flag
排序前: 7 6 9 3 1 5 2 4 8
第1次排序后: 6 7 3 1 5 2 4 8 9
第2次排序后: 6 3 1 5 2 4 7 8 9
第3次排序后: 3 1 5 2 4 6 7 8 9
第4次排序后: 1 3 2 4 5 6 7 8 9
第5次排序后: 1 2 3 4 5 6 7 8 9
排序后: 1 2 3 4 5 6 7 8 9
算法分析
时间复杂度
当数组的元素个数是n,那么第一趟需要(n-1)次比较。第二趟需要(n-1-1)次比较,直到第(n-1)趟是1次比较。不然发现比较次数的总和是 ∑ i = n 2 i − 1 = n ( n − 1 ) / 2 = O ( n 2 ) \\displaystyle \\sum_i=n^2 i-1=n(n-1)/2=O(n^2) i=n∑2i−1=n(n−1)/2=O(n2)。
空间复杂度
算法只申请了几个固定的大小的空间来协助排序,空间复杂度为 O ( 1 ) O(1) O(1)
以上是关于重温基础算法内部排序之冒泡排序法的主要内容,如果未能解决你的问题,请参考以下文章