冒泡排序(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) }
|
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 + " "); } } }
|