2015-06-03 8 views
0
Sort(B) 
for i = 0 to (n-1) 
    x = (i+1); 
    for j = (i+2) to n 
     if B[x] > B[j] 
      x = j; 
    if x != (i+1) 
     temp = B[i+1]; 
     B[i+1] = B[x]; 
     B[x] = temp; 

Какое время работы T (n)? проблема связана с внутренним циклом (для j = (i + 2) до n) Каков наихудший сценарий для внутреннего цикла? И что лучше всего? Я думаю, что они такие же, потому что они независимы, но я хочу убедиться.Время выполнения кода сортировки

+0

Внутренний цикл всегда имеет одинаковое количество итераций для заданной итерации внешнего контура, независимо от ввода. –

ответ

2

Время работы O (n^2).

Каждая внутренняя петля принимает O(n-i) времени, для увеличения значений i от 0 до n-1.

Это дает временную сложность:

T(n) <= CONST*(n-0 + n-1 + n-2 + ... + n-(n-1)) = 
    = CONST*(1 + 2 + ... + n) = CONST*(n(n+1)/2) 

Последнее уравнение происходит от sum of arithmetic progression.

Поскольку n (n + 1)/2 находится в O (n^2), это временная сложность.

+0

Это не точная формула для этого примера, так как внутренний цикл n-i-2. Но мы, конечно, можем удалить это 2, так как это не изменит всю картину. Это будет что-то вроде (n * (n + 1)/2) - 2 * n –

+0

@GiorgiNakeuri Он не должен был давать точную формулу, это приближение с константами, я добавил CONST * или ясность. – amit

+0

Спасибо. Понял :) – user3552818

1

Как показал другой ответ, время выполнения алгоритма равно O (n^2). Я просто хочу указать, что алгоритм выглядит не совсем корректно для меня, потому что он не сортирует первый элемент (B [0] в этом случае) массива.

Смежные вопросы