Sắp xếp nổi bọt

Sắp xếp từ trên xuống

Giả sử dãy cần sắp xếp có n phần tử. Khi tiến hành từ trên xuống, ta so sánh hai phần tử đầu, nếu phần tử đứng trước lớn hơn phần tử đứng sau thì đổi chỗ chúng cho nhau. Tiếp tục làm như vậy với cặp phần tử thứ hai và thứ ba và tiếp tục cho đến cuối tập hợp dữ liệu, nghĩa là so sánh (và đổi chỗ nếu cần) phần tử thứ n-1 với phần tử thứ n. Sau bước này phần tử cuối cùng chính là phần tử lớn nhất của dãy.
Sau đó, quay lại so sánh (và đổi chố nếu cần) hai phần tử đầu cho đến khi gặp phần tử thứ n-2....
Ghi chú: Nếu trong một lần duyệt, không phải đổi chỗ bất cứ cặp phần tử nào thì danh sách đã được sắp xếp xong.

Sắp xếp từ dưới lên

Sắp xếp từ dưới lên so sánh (và đổi chỗ nếu cần) bắt đầu từ việc so sánh cặp phần tử thứ n-1 và n. Tiếp theo là so sánh cặp phần tử thứ n-2 và n-1,... cho đến khi so sánh và đổi chỗ cặp phần tử thứ nhất và thứ hai. Sau bước này phần tử nhỏ nhất đã được nổi lên vị trí trên cùng (nó giống như hình ảnh của các "bọt" khí nhẹ hơn được nổi lên trên). Tiếp theo tiến hành với các phần tử từ thứ 2 đến thứ n.

Sắp xếp từ trên xuống

procedure bubble_sort1(list L, number n)  //n=listsize
    For number i from  n downto 2 
        for number j from 1 to (i - 1)
            if L[j] > L[j + 1] //nếu chúng không đúng thứ tự
                swap(L[j], L[j + 1]) //đổi chỗ chúng cho nhau
            endif
        endfor
       endforendprocedure

Sắp xếp từ dưới lên

procedure bubble_sort2(list L, number n)  //n=listsize
    For number i from 1 to n-1 
        for number j from n-1 downto i
            if L[j] > L[j + 1] //nếu chúng không đúng thứ tự
                swap(L[j], L[j + 1]) //đổi chỗ chúng cho nhau
            endif
        endfor
       endforendprocedure

Giảm bớt vòng duyệt

Nếu trong một lần duyệt nào đó với một i cố định khi vòng lặp j kết thúc mà không cần phải đổi chỗ cặp phần tử nào, nghĩa là mọi cặp phần tử kề nhau đã đứng đúng thứ tự thì dãy đã được sắp xếp và không cần tiến hành vòng lặp tiếp theo. Do đó có thể dùng một cờ để kiểm soát việc này. Ta có một đoạn mã giả của thuật toán nổi bọt như sau:
procedure bubble_sort3(list L, number n)
    i:= n
    while i > 1 do
        has_swapped:= 0 //khởi tạo lại giá trị cờ
        for number j from 1 to (i - 1)
            if L[j] > L[j + 1] //nếu chúng không đúng thứ tự
                swap(L[j], L[j + 1]) //đổi chỗ chúng cho nhau
                has_swapped:= 1 //có đổi chỗ ít nhất một lần, danh sách chưa sắp xếp xong
            endif
        endfor   
        if has_swapped = 0 //nếu không có lần đổi chỗ nào, danh sách đã sắp xếp xong
            exit
         else //nếu có ít nhất một lần đổi chỗ, danh sách chưa sắp xếp xong
            i = i - 1
        endif
    enddoendprocedure
Ghi chú: Cũng có thể không cần dùng đến biến i, khi đó mỗi lần kiểm tra đều phải duyệt từ đầu đến cuối dãy.

Viết bằng Java

private static void bubbleSort(int[] unsortedArray, int length) {
        int temp, counter, index;
        
        for(counter=0; counter<length-1; counter++) { //Loop once for each element in the array.
            for(index=0; index<length-1-counter; index++) { //Once for each element, minus the counter.
                if(unsortedArray[index] > unsortedArray[index+1]) { //Test if need a swap or not.
                    temp = unsortedArray[index]; //These three lines just swap the two elements:
                    unsortedArray[index] = unsortedArray[index+1];
                    unsortedArray[index+1] = temp;
                }
            }
        }
    }

Viết bằng C++

#include<iostream>

using namespace std;

void nhap(int arr[], int &n) {
cout << "Nhap so phan tu cua mang n = ";
cin >> n;
for (int i = 0; i < n; i++) {
 cout << "Phan tu arr["<<i<<"]" << " = ";
 cin >> arr[i];
 } 
 }

void bubblesort(int arr[], int n) {
 for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// swap
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

void inkq(int arr[], int &n) { 
cout << "[ ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << "]" << endl;
}

int main () {
int arr[100], n;
  nhap(arr, n);
  cout << "=< Mang ban dau la: ";
  inkq(arr, n);
  bubblesort(arr, n);
  cout<<"=> Mang khi sap xep la: ";
  inkq(arr, n);
  return 0;
}

Viết bằng PHP

1 $myArr = [1, 1, 7, 6, 5, 4, 3, 2, 1, 3, 2, 1]; 2  3 $count = count($myArr); 4  5 $t = 0; 6  7 for($i = 0; $i < $count; $i++) { 8 for($j = $i+1; $j < $count; $j++) { 9 if($myArr[$j] < $myArr[$i]) {10 $t = $myArr[$j];11 $myArr[$j] = $myArr[$i];12 $myArr[$i] = $t;13 }14 }15 }16 17 for($i=0;$i<$count;$i++) {18 echo $myArr[$i]." ";19 }