Thuật toán sắp xếp Bubble Sort (nổi bọt) được thực hiện như sau. Bắt đầu duyệt từ cuối dãy tới đầu dãy, hai phần từ gần nhau nếu phần tử sau nhỏ hơn phần tử trước ta đổi chỗ hai phần tử. Sau lần duyệt đầu tiên phần tử nhỏ nhất sẽ xuất hiện ở đầu dãy. Việc tiếp theo của chúng ta là đi sắp xếp các phần tử còn lại từ k[2..n]. Vậy có thể thấy rằng, sau bước duyệt thứ \(i\) như vậy thì ta sẽ có phần tử nhỏ nhất thứ \(i\) trong dãy số.

void function BubbleSort() {
    int tmp;
    for (int i = 0; i < n - 1; i ++) {
        // Làm nổi phần tử nhỏ nhất trong đoạn k[i, n - 1] về vị trí k[i]
        for (int j = n - 1; j > i; j --) {
            if (arr[j] < arr[j - 1]) {
                <Đổi chỗ 2 phần tử arr[j] và arr[j - 1]>
            }
        }
    }
}

Độ phức tạp của thuật toán luôn là \(O(n^2)\) bấp chấp dữ liệu ban đầu như thế nào, giống như thuật toán sắp xếp Selection Sort.
Hãy cùng xem cách cài đặt trường trình bằng C++ như sau:

#include <iostream>

using namespace std;

int arr[5] = {1, 5, 4, 2, 3};
int n = 5;
void print();
void bubbleSort();

int main() {
    bubbleSort();
    print();
}

void bubbleSort() {
    int tmp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = n - 1; j > i; j --) {
            if (arr[j] < arr[j - 1]) {
                tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
            }
        }
    }
}

void print() {
    for (int i = 0; i < n; i ++) {
        cout << arr[i] << '\t';
    }
    cout << endl;
}

Kết quả khi chạy chương trình trên sẽ như sau:

1	2	3	4	5