概念
以下排序是基于 升序 的,也就是 从小到大 排序
冒泡排序就是 交换邻近元素,确保相对顺序是对的,简单来说就是 不断的把大的元素推向最右边,和选择排序刚好相反
伪代码
for i <- n-1 downto 1 do
for j <- 0 to i-1 do
if arr[j] > arr[j+1] then
swap(j, j+1)
时间复杂度为 O(n^2)
代码实现
C
#include <stdio.h>
static void bubble_sort(int arr[], size_t size)
{
for (size_t i = size - 1; i > 0; i--) {
for (size_t j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
/* swap */
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
static void print(int arr[], size_t size)
{
for (size_t i = 0; i < size; i++)
printf(" %d", arr[i]);
printf("\n");
}
int main(void)
{
int arr[] = {2, 4, 1, -9, 8, 3, -7};
size_t size = sizeof(arr) / sizeof(arr[0]);
print(arr, size);
bubble_sort(arr, size);
print(arr, size);
return 0;
}
Lua
local function bubble_sort(arr)
for i = #arr, 2, -1 do
for j = 1, i - 1, 1 do
if arr[j] > arr[j + 1] then
-- swap
arr[j], arr[j + 1] = arr[j + 1], arr[j]
end
end
end
end
local function print(arr)
for i = 1, #arr, 1 do
io.write(" " .. tostring(arr[i]))
end
io.write("\n")
end
local function run()
local arr = {3, 6, 1, -9, -6, 5, 23, 1}
print(arr)
bubble_sort(arr)
print(arr)
end
run()
posted on
浙公网安备 33010602011771号