พิจารณารหัสเทียมของ 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 การเปรียบเทียบ)
สำหรับการชี้แจงเกี่ยวกับคำว่าเวลาเฉลี่ย: อัลกอริทึมการเรียงลำดับนี้จะต้องใช้เวลาที่แตกต่างกันในรายการต่าง ๆ (ความยาวเท่ากัน) เนื่องจากอัลกอริทึมอาจต้องการขั้นตอนมากขึ้นหรือน้อยลงผ่าน / ภายในลูปจนกว่ารายการจะสมบูรณ์ ฉันพยายามหาวิธีทางคณิตศาสตร์ (ไม่ใช่วิธีทางสถิติ) ในการประเมินค่าเฉลี่ยของรอบที่ต้องการ
สำหรับสิ่งนี้ฉันคาดว่าคำสั่งใด ๆ จะมีความเป็นไปได้เดียวกัน