冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的列表,比较每对相邻元素,若它们的顺序错误,则交换它们的位置。遍历列表的工作重复进行直到没有再需要交换,即列表已排序完成。
以下是使用不同编程语言实现的冒泡排序代码示例:
JavaScript
function bubbleSort(arr) {
let n = arr.length;
for (let i = 0; i < n - 1; i++) {
let swapped = false;
for (let j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
// 如果一轮循环未发生交换,说明已经有序,可提前退出
if (!swapped) break;
}
return arr;
}
let arr = [64, 34, 25, 12, 22, 11, 90];
console.log("排序后的数组:", bubbleSort(arr));
Python
def bubble_sort(lst):
n = len(lst)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
if lst[j] > lst[j + 1]:
lst[j], lst[j + 1] = lst[j + 1], lst[j]
swapped = True
# 如果一轮循环未发生交换,说明已经有序,可提前退出
if not swapped:
break
return lst
arr = [64, 34, 25, 12, 22, 11, 90]
print("排序后的数组:", bubble_sort(arr))
C++
#include <iostream>
#include <vector>
void bubble_sort(std::vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
bool swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
std::swap(arr[j], arr[j + 1]);
swapped = true;
}
}
// 如果一轮循环未发生交换,说明已经有序,可提前退出
if (!swapped) break;
}
}
int main() {
std::vector<int> arr = {64, 34, 25, 12, 22, 11, 90};
bubble_sort(arr);
for (int i : arr) {
std::cout<< i << " ";
}
return 0;
}
这些代码示例展示了冒泡排序的基本实现,并包含了优化,即如果在某次遍历中没有发生交换,则提前结束排序,因为这意味着数组已经是有序的。