Учитывая этот псевдокод пузырьковой сортировки:
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 сравнение).
Для пояснения термина «среднее время»: этому алгоритму сортировки потребуется разное время в разных списках (одинаковой длины), поскольку алгоритму может потребоваться больше или меньше шагов через / внутри циклов, пока список не станет полностью упорядоченным. Я пытаюсь найти математический (не статистический способ) оценки среднего числа необходимых раундов.
Для этого я ожидаю, что любой заказ будет такой же возможности.