Враховуючи цей псевдо-код бульбашки:
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
Які основні ідеї я повинен мати на увазі, щоб оцінити середню часову складність? Я вже завершив обчислення найгірших та найкращих випадків, але я застряг, роздумуючи, як оцінити середню складність внутрішньої петлі, сформувати рівняння.
Найгірше рівняння:
в якій внутрішня сигма являє собою внутрішню петлю, а зовнішня сигма - зовнішню петлю. Я думаю, що мені потрібно змінити обидві сигми через клаузу "if-then-break", яка може вплинути на зовнішню сигму, але також через клавішу if у внутрішньому циклі, що вплине на дії, здійснені під час циклу (4 дії + 1 порівняння, якщо це правда, інакше лише 1 порівняння).
Для уточнення терміна "середній час": Цей алгоритм сортування потребуватиме різного часу в різних списках (однакової довжини), оскільки алгоритму може знадобитися більше чи менше кроків через / в циклі, поки список повністю не буде в порядку. Я намагаюся знайти математичний (не статистичний спосіб) оцінювання середнього рівня необхідних раундів.
Для цього я очікую, що будь-яке замовлення має однакову можливість.