Bubble Thuật toán sắp xếp với Python sử dụng Ví dụ về Danh sách

Một Bubble Sắp xếp?

Bubble Sắp xếp là một thuật toán sắp xếp được sử dụng để sắp xếp các mục trong danh sách theo thứ tự tăng dần bằng cách so sánh hai giá trị liền kề. Nếu giá trị thứ nhất cao hơn giá trị thứ hai thì giá trị thứ nhất chiếm vị trí giá trị thứ hai, trong khi giá trị thứ hai chiếm vị trí giá trị thứ nhất. Nếu giá trị đầu tiên thấp hơn giá trị thứ hai thì không có sự hoán đổi nào được thực hiện.

Quá trình này được lặp lại cho đến khi tất cả các giá trị trong danh sách được so sánh và hoán đổi nếu cần. Mỗi lần lặp thường được gọi là một lần vượt qua. Số lần thực hiện trong sắp xếp nổi bọt bằng số phần tử trong danh sách trừ đi một.

Với Bubble Sắp xếp vào Python hướng dẫn bạn sẽ học:

Thực hiện Bubble Thuật toán sắp xếp

Chúng tôi sẽ chia quá trình triển khai thành ba (3) bước, đó là vấn đề, giải pháp và thuật toán mà chúng tôi có thể sử dụng để viết mã cho bất kỳ ngôn ngữ nào.

Vấn đề

Một danh sách các vật phẩm được đưa ra theo thứ tự ngẫu nhiên và chúng tôi muốn sắp xếp các vật phẩm một cách có trật tự

Hãy xem xét danh sách sau:

[21,6,9,33,3]

Giải pháp

Lặp lại danh sách so sánh hai phần tử liền kề và hoán đổi chúng nếu giá trị đầu tiên cao hơn giá trị thứ hai.

Kết quả sẽ như sau:

[3,6,9,21,33]

Thuật toán

Thuật toán sắp xếp bong bóng hoạt động như sau

Bước 1) Lấy tổng số phần tử. Lấy tổng số mục trong danh sách nhất định

Bước 2) Xác định số lượng đường chuyền bên ngoài (n – 1) cần thực hiện. Độ dài của nó là danh sách trừ đi một

Bước 3) Thực hiện các lượt bên trong (n – 1) lần cho lượt ngoài 1. Lấy giá trị phần tử đầu tiên và so sánh nó với giá trị thứ hai. Nếu giá trị thứ hai nhỏ hơn giá trị thứ nhất thì hoán đổi vị trí

Bước 4) Lặp lại bước 3 cho đến khi bạn đạt đến đường chuyền bên ngoài (n – 1). Lấy phần tử tiếp theo trong danh sách, sau đó lặp lại quy trình đã thực hiện ở bước 3 cho đến khi tất cả các giá trị được đặt theo đúng thứ tự tăng dần.

Bước 5) Trả về kết quả khi tất cả các lượt đã được thực hiện. Trả về kết quả của danh sách đã sắp xếp

Bước 6) Tối ưu hóa thuật toán

Tránh các lượt chuyển vào bên trong không cần thiết nếu danh sách hoặc các giá trị liền kề đã được sắp xếp. Ví dụ: nếu danh sách được cung cấp đã chứa các phần tử đã được sắp xếp theo thứ tự tăng dần thì chúng ta có thể ngắt vòng lặp sớm.

Tối ưu hóa Bubble Thuật toán sắp xếp

Theo mặc định, thuật toán sắp xếp bong bóng trong Python so sánh tất cả các mục trong danh sách bất kể danh sách đã được sắp xếp hay chưa. Nếu danh sách đã cho đã được sắp xếp, việc so sánh tất cả các giá trị là lãng phí thời gian và tài nguyên.

Tối ưu hóa sắp xếp nổi bật giúp chúng tôi tránh những lần lặp lại không cần thiết, đồng thời tiết kiệm thời gian và tài nguyên.

Ví dụ: nếu mục đầu tiên và mục thứ hai đã được sắp xếp thì không cần phải lặp qua các giá trị còn lại. Quá trình lặp lại kết thúc và lần lặp tiếp theo được bắt đầu cho đến khi quá trình hoàn tất như minh họa bên dưới Bubble Ví dụ sắp xếp.

Việc tối ưu hóa được thực hiện bằng các bước sau

Bước 1) Tạo một biến cờ để theo dõi xem có bất kỳ sự hoán đổi nào xảy ra trong vòng lặp bên trong không

Bước 2) Nếu các giá trị đã hoán đổi vị trí, hãy tiếp tục lần lặp tiếp theo

Bước 3) Nếu các lợi ích chưa hoán đổi vị trí, hãy chấm dứt vòng lặp bên trong và tiếp tục với vòng lặp bên ngoài.

Sắp xếp nổi bật được tối ưu hóa sẽ hiệu quả hơn vì nó chỉ thực hiện các bước cần thiết và bỏ qua những bước không bắt buộc.

Đại diện trực quan

Với danh sách năm phần tử, các hình ảnh sau đây minh họa cách sắp xếp bong bóng lặp lại các giá trị khi sắp xếp chúng

Hình ảnh sau đây hiển thị danh sách chưa được sắp xếp

Đại diện trực quan

Lần lặp đầu tiên

Bước 1)

Đại diện trực quan

Các giá trị 21 và 6 được so sánh để kiểm tra xem giá trị nào lớn hơn giá trị kia.

Đại diện trực quan

21 lớn hơn 6 nên 21 chiếm vị trí của 6 trong khi 6 chiếm vị trí của 21

Đại diện trực quan

Danh sách đã sửa đổi của chúng tôi bây giờ trông giống như danh sách ở trên.

Bước 2)

Đại diện trực quan

Các giá trị 21 và 9 được so sánh.

Đại diện trực quan

21 lớn hơn 9 nên ta hoán đổi vị trí của 21 và 9

Đại diện trực quan

Danh sách mới bây giờ như trên

Bước 3)

Đại diện trực quan

Các giá trị 21 và 33 được so sánh để tìm giá trị lớn hơn.

Đại diện trực quan

Giá trị 33 lớn hơn 21 nên không có sự hoán đổi nào xảy ra.

Bước 4)

Đại diện trực quan

Các giá trị 33 và 3 được so sánh để tìm giá trị lớn hơn.

Đại diện trực quan

Giá trị 33 lớn hơn 3 nên chúng ta hoán đổi vị trí của chúng.

Đại diện trực quan

Danh sách được sắp xếp ở cuối lần lặp đầu tiên giống như ở trên

Lần lặp thứ hai

Danh sách mới sau lần lặp thứ hai như sau

Đại diện trực quan

Lần lặp thứ ba

Danh sách mới sau lần lặp thứ ba như sau

Đại diện trực quan

Lần lặp thứ tư

Danh sách mới sau lần lặp thứ tư như sau

Đại diện trực quan

Python Các ví dụ

Đoạn mã sau đây cho thấy cách thực hiện Bubble Thuật toán sắp xếp trong Python.

def bubbleSort( theSeq ):
    n = len( theSeq )

    for i in range( n - 1 ) :
        flag = 0

        for j in range(n - 1) :
            
            if theSeq[j] > theSeq[j + 1] : 
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21,6,9,33,3] 

result = bubbleSort(el)

print (result)

Thực hiện chương trình sắp xếp bong bóng ở trên trong Python tạo ra các kết quả sau

[6, 9, 21, 3, 33]

Giải thích mã

Lời giải thích cho Python Bubble Sắp xếp mã chương trình như sau

Giải thích mã

ĐÂY,

  1. Xác định hàm bubbleSort chấp nhận tham số theSeq. Mã không xuất ra bất cứ điều gì.
  2. Lấy độ dài của mảng và gán giá trị cho biến n. Mã không xuất ra bất cứ thứ gì
  3. Bắt đầu vòng lặp for chạy thuật toán sắp xếp bong bóng (n – 1) lần. Đây là vòng lặp bên ngoài. Mã không xuất ra bất cứ thứ gì
  4. Xác định một biến cờ sẽ được sử dụng để xác định xem việc hoán đổi có xảy ra hay không. Điều này là dành cho mục đích tối ưu hóa. Mã không xuất ra bất cứ thứ gì
  5. Bắt đầu vòng lặp bên trong so sánh tất cả các giá trị trong danh sách từ giá trị đầu tiên đến giá trị cuối cùng. Mã không xuất ra bất cứ thứ gì.
  6. Sử dụng câu lệnh if để kiểm tra xem giá trị ở phía bên trái có lớn hơn giá trị ở phía bên phải hay không. Mã không xuất ra bất cứ điều gì.
  7. Gán giá trị của theSeq[j] cho biến thời gian tmp nếu điều kiện là đúng. Mã không xuất ra bất cứ thứ gì
  8. Giá trị của theSeq[j + 1] được gán cho vị trí của theSeq[j]. Mã không xuất ra bất cứ thứ gì
  9. Giá trị của biến tmp được gán cho vị trí theSeq[j + 1]. Mã không xuất ra bất cứ thứ gì
  10. Biến cờ được gán giá trị 1 để chỉ ra rằng việc hoán đổi đã diễn ra. Mã không xuất ra bất cứ thứ gì
  11. Sử dụng câu lệnh if để kiểm tra xem giá trị của biến flag có bằng 0 hay không. Mã không xuất ra bất cứ thứ gì
  12. Nếu giá trị là 0 thì chúng ta gọi câu lệnh break bước ra khỏi vòng lặp bên trong.
  13. Trả về giá trị của theSeq sau khi nó được sắp xếp. Mã xuất ra danh sách đã sắp xếp.
  14. Xác định một biến el chứa danh sách các số ngẫu nhiên. Mã không xuất ra bất cứ điều gì.
  15. Gán giá trị của hàm bubbleSort cho một biến kết quả.
  16. In giá trị của biến result.

Bubbllợi thế sắp xếp điện tử

Sau đây là một số ưu điểm của thuật toán sắp xếp bong bóng

  • Thật dễ hiểu
  • Nó hoạt động rất tốt khi danh sách đã được sắp xếp hoặc gần như được sắp xếp
  • Nó không đòi hỏi bộ nhớ rộng rãi.
  • Thật dễ dàng để viết mã cho thuật toán
  • Yêu cầu về không gian là tối thiểu so với các thuật toán sắp xếp khác.

Bubble sắp xếp Nhược điểm

Sau đây là một số nhược điểm của thuật toán sắp xếp bong bóng

  • Nó không hoạt động tốt khi sắp xếp danh sách lớn. Phải mất quá nhiều thời gian và nguồn lực.
  • Nó chủ yếu được sử dụng cho mục đích học tập chứ không phải ứng dụng trong thế giới thực.
  • Số bước cần thiết để sắp xếp danh sách theo thứ tự n2

Phân tích độ phức tạp của Bubble Sắp xếp

Có ba loại Độ phức tạp là:

1) Độ phức tạp của sắp xếp

Độ phức tạp của sắp xếp được sử dụng để biểu thị lượng thời gian thực hiện và không gian cần thiết để sắp xếp danh sách. Sắp xếp bong bóng thực hiện (n – 1) lần lặp để sắp xếp danh sách trong đó n là tổng số phần tử trong danh sách.

2) Độ phức tạp về thời gian

Độ phức tạp thời gian của thuật toán sắp xếp bong bóng là O(n2)

Độ phức tạp về thời gian có thể được phân loại như sau:

  • Trường hợp xấu nhất – đây là nơi danh sách được cung cấp theo thứ tự giảm dần. Thuật toán thực hiện số lần thực thi tối đa được biểu thị bằng [Big-O] O(n2)
  • Trường hợp tốt nhất – điều này xảy ra khi danh sách được cung cấp đã được sắp xếp. Thuật toán thực hiện số lượng thực thi tối thiểu được biểu thị là [Big-Omega] Ω(n)
  • Trường hợp trung bình – điều này xảy ra khi danh sách được sắp xếp ngẫu nhiên. Độ phức tạp trung bình được biểu diễn là [Big-theta] ⊝(n2)

3) Độ phức tạp của không gian

Độ phức tạp không gian đo lượng không gian bổ sung cần thiết để sắp xếp danh sách. Sắp xếp bong bóng chỉ yêu cầu một (1) không gian bổ sung cho biến thời gian được sử dụng để hoán đổi giá trị. Do đó, nó có độ phức tạp không gian là O (1).

Tổng kết

  • Thuật toán sắp xếp bong bóng hoạt động bằng cách so sánh hai giá trị liền kề và hoán đổi chúng nếu giá trị bên trái nhỏ hơn giá trị bên phải.
  • Việc triển khai thuật toán sắp xếp bong bóng tương đối đơn giản với Python. Tất cả những gì bạn cần sử dụng là các vòng lặp for và câu lệnh if.
  • Vấn đề mà thuật toán sắp xếp bong bóng giải quyết là lấy một danh sách ngẫu nhiên các mục và biến nó thành danh sách có thứ tự.
  • Thuật toán sắp xếp bong bóng trong cấu trúc dữ liệu hoạt động tốt nhất khi danh sách đã được sắp xếp vì nó thực hiện số lần lặp tối thiểu.
  • Thuật toán sắp xếp bong bóng không hoạt động tốt khi danh sách theo thứ tự ngược lại.
  • Thuật toán sắp xếp bong bóng có độ phức tạp thời gian là O (n2) và độ phức tạp không gian của O (1)
  • Thuật toán sắp xếp nổi bọt phù hợp nhất cho mục đích học thuật chứ không phải cho ứng dụng trong thế giới thực.
  • Tính năng sắp xếp bong bóng được tối ưu hóa giúp thuật toán hiệu quả hơn bằng cách bỏ qua các bước lặp không cần thiết khi kiểm tra các giá trị đã được sắp xếp.