Xem xét mã giả này của bong bóng:
FOR i := 0 TO arraylength(list) STEP 1
switched := false
FOR j := 0 TO arraylength(list)-(i+1) STEP 1
IF list[j] > list[j + 1] THEN
switch(list,j,j+1)
switched := true
ENDIF
NEXT
IF switched = false THEN
break
ENDIF
NEXT
Điều gì sẽ là những ý tưởng cơ bản mà tôi sẽ phải ghi nhớ để đánh giá độ phức tạp thời gian trung bình? Tôi đã hoàn thành việc tính toán các trường hợp xấu nhất và tốt nhất, nhưng tôi bế tắc khi cân nhắc làm thế nào để đánh giá độ phức tạp trung bình của vòng lặp bên trong, để tạo thành phương trình.
Phương trình trường hợp xấu nhất là:
trong đó sigma bên trong đại diện cho vòng lặp bên trong và sigma bên ngoài đại diện cho vòng lặp bên ngoài. Tôi nghĩ rằng tôi cần thay đổi cả hai sigmas do phần "if-then-break", điều này có thể ảnh hưởng đến sigma bên ngoài nhưng cũng do mệnh đề if trong vòng lặp bên trong, sẽ ảnh hưởng đến các hành động được thực hiện trong một vòng lặp (4 hành động + 1 so sánh nếu đúng, khác chỉ là 1 so sánh).
Để làm rõ về thuật ngữ thời gian trung bình: Thuật toán sắp xếp này sẽ cần thời gian khác nhau trên các danh sách khác nhau (có cùng độ dài), vì thuật toán có thể cần nhiều hoặc ít bước qua / trong các vòng lặp cho đến khi danh sách hoàn toàn theo thứ tự. Tôi cố gắng tìm một toán học (cách không thống kê) để đánh giá trung bình của các vòng đó cần thiết.
Đối với điều này, tôi hy vọng bất kỳ thứ tự sẽ có cùng khả năng.