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

⚡ Tóm tắt thông minh

Bubble Sort 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 lặp đi lặp lại các giá trị liền kề và hoán đổi chúng.ping Chúng được sắp xếp khi phần tử bên trái lớn hơn. Thuật toán sắp xếp so sánh đơn giản này phù hợp với các tập dữ liệu nhỏ hoặc gần như đã được sắp xếp và giúp người học nắm vững logic sắp xếp cơ bản một cách hiệu quả.

  • 🔁 Cơ chế cốt lõi: BubblThuật toán sắp xếp e so sánh từng cặp phần tử liền kề và hoán đổi vị trí của chúng, đẩy giá trị chưa được sắp xếp lớn nhất vào vị trí cuối cùng sau mỗi lượt.
  • ⚙️ Biến thể được tối ưu hóa: Một biến cờ phát hiện khi nào một lượt không thực hiện hoán đổi nào, giúp dừng vòng lặp sớm để danh sách đã được sắp xếp hoàn tất trong một lần quét duy nhất.
  • 🐍 Python Thực hiện: Hai vòng lặp lồng nhau cộng với một biến tạm thời sẽ sắp xếp danh sách, và phần hướng dẫn sẽ mô tả chính xác hành vi của từng dòng lệnh.
  • 📊 Hồ sơ độ phức tạp: Độ phức tạp về thời gian là O(n²) trong trường hợp xấu nhất và trung bình, Ω(n) trong trường hợp tốt nhất, với yêu cầu không gian không đổi O(1).
  • 🎯 Phù hợp nhất: BubblThuật toán e-sort rất tốt cho việc giảng dạy và xử lý các danh sách gần như đã được sắp xếp, nhưng lại hoạt động kém hiệu quả trên các tập dữ liệu lớn so với các thuật toán tiên tiến hơn.

Bubble Thuật toán sắp xếp

Một Bubble Sắp xếp?

Bubble Sắp xếp Thuật toán sắp xếp được sử dụng để sắp xếp các phần tử 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ị đầu tiên lớn hơn giá trị thứ hai, giá trị đầu tiên sẽ thế vị trí của giá trị thứ hai, trong khi giá trị thứ hai thế vị trí của giá trị đầu tiên. Nếu giá trị đầu tiên nhỏ hơn giá trị thứ hai, thì không có sự hoán đổi nào.ping đã xong.

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ẽ tìm hiểu vấn đề mà nó giải quyết, dạng tối ưu hóa của nó, hướng dẫn trực quan từng bước và một ví dụ hoạt động. Python chương trình và các đặc điểm hiệu suất của nó.

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

Chúng tôi sẽ chia nhỏ 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 mục được cho ngẫu nhiên, và chúng ta muốn sắp xếp các mục đó theo thứ tự hợp lý.

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

[21, 6, 9, 33, 3]

Giải pháp

Lặp qua danh sách, so sánh hai phần tử liền kề và hoán đổi chúng.ping 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 nổi bọt hoạt động như sau:

Bước 1) Tính tổng số phần tử. Tính tổng số mục trong danh sách đã cho.

Bước 2) Xác định số lượt đi 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 lượt duyệt bên trong (n – 1) lần cho lượt duyệt bên ngoài 1. Lấy giá trị của 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ị đầu tiên, thì hoán đổi vị trí.

Bước 4) Lặp lại bước 3 cho đến khi bạn đạt đến lượt ngoài cùng (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 xử lý đã hoàn tất. Trả về kết quả của danh sách đã được 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.

Quá trình tối ưu hóa được thực hiện theo các bước sau:

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

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

Bước 3) Nếu các giá trị không hoán đổi vị trí cho nhau, hãy kết thúc 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 một danh sách gồm năm phần tử, các hình ảnh sau minh họa cách thuật toán sắp xếp nổi bọt duyệt qua 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:

Bubble Sắp xếp danh sách chưa được sắp xếp

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

Bước 1)

Bubble Sắp xếp so sánh 21 và 6

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.

Bubble Sắp xếp hoán đổiping 21 và 6

21 lớn hơn 6, nên 21 thế chỗ của 6, còn 6 thế chỗ của 21.

Bubble Sắp xếp danh sách đã sửa đổi sau khi hoán đổi

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)

Bubble Sắp xếp so sánh 21 và 9

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

Bubble Sắp xếp hoán đổiping 21 và 9

21 lớn hơn 9, vì vậy ta đổi chỗ cho 21 và 9.

Bubble Sắp xếp danh sách mới sau khi hoán đổi

Danh sách mới như trên.

Bước 3)

Bubble Sắp xếp so sánh 21 và 33

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

Bubble Sắp xếp 33 lớn hơn 21 không hoán đổi

Giá trị 33 lớn hơn 21, nên không cần hoán đổi.ping diễn ra.

Bước 4)

Bubble Sắp xếp so sánh 33 và 3

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

Bubble Sắp xếp hoán đổiping 33 và 3

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

Bubble Sắp xếp danh sách đã được sắp xếp sau lần lặp đầu tiên

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

Lần lặp thứ hai

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

Bubble Sắp xếp danh sách sau lần lặp thứ hai

Lần lặp thứ ba

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

Bubble Sắp xếp danh sách sau lần lặp thứ ba

Lần lặp thứ tư

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

Bubble Sắp xếp danh sách đã được sắp xếp hoàn toàn sau lần lặp thứ tư

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:

[3, 6, 9, 21, 33]

Code Giải thích

Lời giải thích cho Python BubblMã chương trình sắp xếp e như sau:

Bubble Sắp xếp Python 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. Đoạn mã này lấy độ dài của mảng và gán giá trị cho biến n. Nó không xuất ra bất kỳ giá trị nào.
  3. Bắt đầu một vòng lặp for chạy thuật toán sắp xếp nổi bọt (n – 1) lần. Đây là vòng lặp ngoài. Mã này không xuất ra bất cứ thứ gì.
  4. Định nghĩa một biến cờ sẽ được sử dụng để xác định xem thao tác hoán đổi đã xảy ra hay chưa. Điều này nhằm mục đích tối ưu hóa. Mã không xuất ra bất kỳ giá trị nào.
  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 một biến tạm thời tmp nếu điều kiện được đánh giá là đúng. Mã này 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]. Đoạn mã không xuất ra bất cứ thứ gì.
  10. Biến cờ được gán giá trị 1 để báo hiệu rằng đã có sự hoán đổi. Đoạn mã không xuất ra bất kỳ giá trị nào.
  11. Đoạn mã 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 kỳ giá trị nào.
  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ử

Dưới đây là một số ưu điểm của thuật toán sắp xếp nổi bọt:

  • 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.
  • Viết mã cho thuật toán này rất dễ.
  • 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

Dưới đây là một số nhược điểm của thuật toán sắp xếp nổi bọt:

  • 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 thuật chứ không phải ứng dụng trong thực tế.
  • 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:

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

Độ phức tạp của thuật toán sắp xếp được sử dụng để thể hiện thời gian thực thi và không gian lưu trữ cần thiết để sắp xếp danh sách. Thuật toán sắp xếp nổi bọt 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ần thực thi tối thiểu được biểu thị bằng [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 lượng không gian bổ sung cần thiết để sắp xếp danh sách. Thuật toán sắp xếp nổi bọt 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 đổiping giá trị. Do đó, nó có độ phức tạp không gian là O(1).

Câu Hỏi Thường Gặp

BubblThuật toán sắp xếp nổi bọt hiếm khi được sử dụng trong AI sản xuất, nhưng nó giúp dạy logic sắp xếp đằng sau quá trình chuẩn bị dữ liệu. Các quy trình học máy sắp xếp các đặc trưng, ​​điểm số và dự đoán bằng các thuật toán nhanh hơn, nhưng thuật toán sắp xếp nổi bọt làm rõ khái niệm so sánh và hoán đổi cho người mới bắt đầu.

Đúng vậy. Trợ lý AI có thể viết thuật toán sắp xếp nổi bọt bằng ngôn ngữ lập trình này. Python, Java, hoặc là C++ và bổ sung tính năng tối ưu hóa cờ để dừng sớm khi gặp danh sách đã được sắp xếp. Họ cũng có thể đề xuất các thuật toán nhanh hơn khi tập dữ liệu trở nên lớn.

Thuật toán này được gọi là sắp xếp nổi bọt vì các giá trị lớn hơn dần dần "nổi lên" cuối danh sách sau mỗi lượt, giống như các bong bóng khí nổi lên mặt nước, trong khi các giá trị nhỏ hơn chìm xuống đầu danh sách.

BubblThuật toán e sort có thời gian thực hiện là O(n²), chậm hơn nhiều so với quicksort và merge sort với thời gian O(n log n). BubblThuật toán e-sort phù hợp với các ví dụ nhỏ hoặc dùng trong giảng dạy, trong khi quicksort và merge sort xử lý hiệu quả các tập dữ liệu lớn trong thực tế.

Tóm tắt bài viết này với: