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ả.

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:
Lần lặp đầu tiên
Bước 1)
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.
21 lớn hơn 6, nên 21 thế chỗ của 6, còn 6 thế chỗ của 21.
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)
Các giá trị 21 và 9 được so sánh.
21 lớn hơn 9, vì vậy ta đổi chỗ cho 21 và 9.
Danh sách mới như trên.
Bước 3)
Các giá trị 21 và 33 được so sánh để tìm giá trị lớn hơn.
Giá trị 33 lớn hơn 21, nên không cần hoán đổi.ping diễn ra.
Bước 4)
Các giá trị 33 và 3 được so sánh để tìm giá trị lớn hơn.
Giá trị 33 lớn hơn 3 nên chúng ta hoán đổi vị trí của chúng.
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:
Lần lặp thứ ba
Danh sách mới sau lần lặp thứ ba như sau:
Lần lặp thứ tư
Danh sách mới sau lần lặp thứ tư như sau:
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:
ĐÂY,
- 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ì.
- Đ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.
- 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ì.
- Đị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.
- 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ì.
- 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ì.
- 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ì.
- 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ì.
- 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ì.
- 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.
- Đ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.
- 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.
- 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.
- 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ì.
- Gán giá trị của hàm bubbleSort cho một biến kết quả.
- 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).
















