พิจารณารหัสเทียมของ bubbleort แบบนี้:
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
อะไรคือแนวคิดพื้นฐานที่ฉันต้องจำไว้เพื่อประเมินความซับซ้อนของเวลาโดยเฉลี่ย ฉันได้ทำการคำนวณกรณีที่เลวร้ายที่สุดและดีที่สุดเรียบร้อยแล้ว แต่ฉันก็ตรึกตรองว่าจะประเมินความซับซ้อนเฉลี่ยของวงในเพื่อสร้างสมการ
สมการที่แย่ที่สุดคือ:
ที่ sigma ด้านในแทนวงด้านในและ sigma ด้านนอกแทนวงนอก ฉันคิดว่าฉันต้องเปลี่ยนทั้ง sigmas เนื่องจาก "if-then-break" - clause ซึ่งอาจส่งผลต่อ sigma ด้านนอก แต่เนื่องมาจาก if-clause ในลูปด้านในซึ่งจะส่งผลต่อการกระทำที่ทำระหว่างลูป (4 การกระทำ + 1 การเปรียบเทียบหากเป็นจริงมิฉะนั้นเพียง 1 การเปรียบเทียบ)
สำหรับการชี้แจงเกี่ยวกับคำว่าเวลาเฉลี่ย: อัลกอริทึมการเรียงลำดับนี้จะต้องใช้เวลาที่แตกต่างกันในรายการต่าง ๆ (ความยาวเท่ากัน) เนื่องจากอัลกอริทึมอาจต้องการขั้นตอนมากขึ้นหรือน้อยลงผ่าน / ภายในลูปจนกว่ารายการจะสมบูรณ์ ฉันพยายามหาวิธีทางคณิตศาสตร์ (ไม่ใช่วิธีทางสถิติ) ในการประเมินค่าเฉลี่ยของรอบที่ต้องการ
สำหรับสิ่งนี้ฉันคาดว่าคำสั่งใด ๆ จะมีความเป็นไปได้เดียวกัน