冒泡排序
什么是冒泡排序
冒泡排序是一种常见的排序算法,它的基本思想是通过比较相邻元素的大小,将较大的数向后移动,较小的数向前移动。在第一轮比较结束后,最大的数就会被移动到最后一个位置;接着进行第二轮比较,次大的数会被移动到倒数第二个位置,以此类推,直到所有元素都被排序。因为排序的过程中像气泡一样将大的元素逐渐浮动到数组的一端,所以称为冒泡排序。冒泡排序时间复杂度为O(n^2)
用Python实现
def bubble_sort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# 最后 i 个元素已经排好序,不需要再进行比较
for j in range(0, n-i-1):
# 如果当前元素比下一个元素大,则交换它们的位置
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
# 测试代码
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("排序后的数组:")
for i in range(len(arr)):
print("%d" % arr[i])
输出结果为:
排序后的数组:
11
12
22
25
34
64
90
用Golang实现
package main
import "fmt"
func bubbleSort(arr []int) {
n := len(arr)
// 遍历所有数组元素
for i := 0; i < n; i++ {
// 最后 i 个元素已经排好序,不需要再进行比较
for j := 0; j < n-i-1; j++ {
// 如果当前元素比下一个元素大,则交换它们的位置
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
}
func main() {
arr := []int{64, 34, 25, 12, 22, 11, 90}
bubbleSort(arr)
fmt.Println("排序后的数组:", arr)
}
输出结果为:
排序后的数组: [11 12 22 25 34 64 90]
用JS实现
function bubbleSort(arr) {
const n = arr.length;
// 遍历所有数组元素
for (let i = 0; i < n; i++) {
// 最后 i 个元素已经排好序,不需要再进行比较
for (let j = 0; j < n-i-1; j++) {
// 如果当前元素比下一个元素大,则交换它们的位置
if (arr[j] > arr[j+1]) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
}
// 测试代码
const arr = [64, 34, 25, 12, 22, 11, 90];
bubbleSort(arr);
console.log("排序后的数组:", arr);
输出结果为:
排序后的数组: [11, 12, 22, 25, 34, 64, 90]
用TS实现
function bubbleSort(arr: number[]): void {
const n = arr.length;
// 遍历所有数组元素
for (let i = 0; i < n; i++) {
// 最后 i 个元素已经排好序,不需要再进行比较
for (let j = 0; j < n-i-1; j++) {
// 如果当前元素比下一个元素大,则交换它们的位置
if (arr[j] > arr[j+1]) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
}
// 测试代码
const arr: number[] = [64, 34, 25, 12, 22, 11, 90];
bubbleSort(arr);
console.log("排序后的数组:", arr);
输出结果为:
排序后的数组: [11, 12, 22, 25, 34, 64, 90]