Bubble Sort

Bubble sort là thuật toán hoạt động bằng cách hoán đổi vị trí hai phần tử tử liền kề nhau nếu chúng sai vị trí.

B1: Khởi tạo i = 0
B2: Loop i từ 0 đến N - 2, 
   + Khởi tạo j = i + 1
   + Loop j từ i + 1 đến N - 1
     $ Nếu arr[j] > arr[j + 1] swap arr[j] và arr[j + 1]
   

Sau mỗi lần lặp của biến i: mảng arr[] có độ dài bằng size

  • Nếu sắp xếp tăng dần: đưa giá trị lớn nhất về vị trí size – i
  • Nếu sắp xếp giảm dần: đưa giá trị nhỏ nhất về vị trí size – i

Lưu ý: giá trị của biến i cũng chính là số lượng phần tử đã được sắp xếp trong mảng.

Implementation

public static <T extends Comparable<T>> void sort(T[] arr, int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                /*
                 * Use codition arr[j] with a[j + 1]
                 * Sort by ASC => Compare ">"
                 * Sort by DESC => Compare "<"
                 */

                if (arr[j].compareTo(arr[j + 1]) < 0) {
                    T tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                }
            }
        }
    }

 

Bubble sort có độ phức tạp θ(n2) với mọi tập dữ liệu. 

Tối ưu thuật toán: Ta thấy với mỗi lần lặp, bubble sort liên tục hoán đổi nếu vị trí của 2 phần tử liền kề không đúng thứ tự. Vậy nếu ở một lần lặp nào đó mà không có sự hoán đổi thì có nghĩa là không có bất kỳ cặp số liền kề nào đứng sai vị trí => ta dừng phép sắp xếp.

Minh hoạ sắp xếp tăng dần:

arr[] = {7, 6, 8, 4, 3, 0}

Lần lặp 1: 

  • {7, 6, 8, 4, 3, 0} => {6, 7, 8, 4, 3, 0}
  • {6, 7, 8, 4, 3, 0} => {6, 7, 8, 4, 3, 0}
  • {6, 7, 8, 4, 3, 0} => {6, 7, 4, 8, 3, 0}
  • {6, 7, 4, 8, 3, 0} => {6, 7, 4, 3, 8, 0}
  • {6, 7, 4, 3, 8, 0} => {6, 7, 4, 3, 0, 8}

Lần lặp 2:

  • {6, 7, 4, 3, 0, 8} => {6, 7, 4, 3, 0, 8}
  • {6, 7, 4, 3, 0, 8} => {6, 4, 7, 3, 0, 8}
  • {6, 4, 7, 3, 0, 8} => {6, 4, 3, 7, 0, 8}
  • {6, 4, 3, 7, 0, 8} => {6, 4, 3, 0, 7, 8}

Lần lặp 3:

  • {6, 4, 3, 0, 7, 8} => {4, 6, 3, 0, 7, 8}
  • {4, 63, 0, 7, 8} => {4, 3, 6, 0, 7, 8}
  • {4, 36, 0, 7, 8} => {4, 3, 0, 6, 7, 8}

Lần lặp 4: 

  • {4, 3, 0, 6, 7, 8} => {3, 4, 0, 6, 7, 8}
  • {3, 4, 0, 6, 7, 8} => {3, 0, 4, 6, 7, 8}

Lần lặp 5: 

  • {3, 0, 4, 6, 7, 8} => {0, 3, 4, 6, 7, 8}

 

Link source code: bubble sort

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x