You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.8 KiB

冒泡排序

一、算法原理

混沌未开之际,盘古大神开天辟地,清而轻的上升为天,浊而重的下沉为地。冒泡排序就是类似把清(小)的上升,重(大)的下沉。

原理:就是像水中的泡泡一样,把每个数比作一个泡泡,相邻两个泡泡相互比较,较轻的一个就往上浮。最后就得到了一个有序的泡泡组合。

二、算法思路

小提示:假设从小排到大的方式,一轮比较下来最大的值就会跑到末尾位置,再次进行二轮比较后最大值排在末尾倒数第二位,依次类推...

所以就得出 for 的判定条件是 j < len - 1 - i

三、视频讲解

算法动画图解:三分钟学会冒泡排序算法

四、由小到大

#include <bits/stdc++.h>
using namespace std;

int a[] = {1, 3, 5, 7, 9, 2, 4, 6, 8}; // 待排序数组

int main() {
    int len = sizeof(a) / sizeof(int); // 数组长度

    // 冒泡排序
    for (int i = 0; i < len; i++)
        for (int j = 0; j < len - 1 - i; j++)
            if (a[j] > a[j + 1]) // 从小排到大
                swap(a[j], a[j + 1]);

    // 打印数组
    for (int i = 0; i < len; ++i) cout << a[i] << " ";

    return 0;
}

五、由大到小

#include <bits/stdc++.h>
using namespace std;

int a[] = {1, 3, 5, 7, 9, 2, 4, 6, 8}; // 待排序数组

int main() {
    int len = sizeof(a) / sizeof(int); // 数组长度

    // 冒泡排序
    for (int i = 0; i < len; i++)
        for (int j = 0; j < len - 1 - i; j++)
            if (a[j] < a[j + 1]) // 从大排到小
                swap(a[j], a[j + 1]);

    // 打印数组
    for (int i = 0; i < len; i++) cout << a[i] << " ";

    return 0;
}