冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。
1.算法性能
平均时间复杂度 : O(n^2)
最优时间复杂度: O(n)
最差时间复杂度: O(n^2)
空间复杂度: O(1)
稳定性: 稳定
2.算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
3. 动图演示
4.Go 代码实现
func BubbleSort(arr []int) {
length := len(arr)
for i := 0; i < length; i++ {
falg := true
for j := 0; j < length-i-1; j++ { // 依次比较相邻的两个元素,使较大的那个向后移
if arr[j] > arr[j+1] { // 如果条件改成arr[j] >= arr[j + 1],则变为不稳定的排序算法
arr[j], arr[j+1] = arr[j+1], arr[j]
falg = false
}
}
if falg {
break
}
}
}
5.Java 代码实现
public static void bubbleSort(int[] arr) {
for (int i=0;i
// 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
boolean falg = true;
for (int j=0;j
if (arr[j] > arr[j+1] ) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
falg = false;
}
}
if (falg) {
break;
}
}
}