概念

以下排序是基于 升序 的,也就是 从小到大 排序

冒泡排序就是 交换邻近元素,确保相对顺序是对的,简单来说就是 不断的把大的元素推向最右边,和选择排序刚好相反

伪代码

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 2025-03-10 14:46  Dylaris  阅读(19)  评论(0)    收藏  举报