冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,通过重复遍历待排序的列表,依次比较相邻元素的大小,并交换位置错误的元素,直到整个列表有序。

算法原理

  • 核心思想:重复遍历数组,依次比较相邻元素,若顺序错误则交换,直到数组完全有序。
  • 特点:每一轮遍历会将当前未排序部分的最大元素”冒泡”到末尾。
  • 优化点:若某轮遍历无交换操作,可提前终止排序(说明已有序)。

时间复杂度

场景 时间复杂度
最好情况 O(n)
最坏情况 O(n²)
平均情况 O(n²)

代码实现

Golang 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "fmt"

func bubbleSort(arr []int) {
n := len(arr)
swapped := true // 优化标记

for i := 0; i < n-1 && swapped; i++ {
swapped = false
for j := 0; j < n-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = true
}
}
}
}

func main() {
arr := []int{64, 34, 25, 12, 22, 11, 90}
bubbleSort(arr)
fmt.Println("Sorted:", arr) // Output: Sorted: [11 12 22 25 34 64 90]
}

Java 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class BubbleSort {
public static void bubbleSort(int[] arr) {
boolean swapped = true;
int n = arr.length;

for (int i = 0; i < n - 1 && swapped; i++) {
swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
}
}

public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
bubbleSort(arr);
System.out.print("Sorted: ");
for (int num : arr) {
System.out.print(num + " "); // Output: Sorted: 11 12 22 25 34 64 90
}
}
}

冒泡排序
https://zhyyao.me/2022/08/31/algorithm/sort/bubble_sort/
作者
zhyyao
发布于
2022年8月31日
许可协议