2013-05-21 3 views
-3

Я хочу знать большую нотацию O и Big Omega обозначение (худший случай, лучший случай) этот код Это алгоритм сортировки и я думаю, что это имеет O(n) и Omega(n) :Что нового в этом коде?

public static void swap(int[] A, int i,int j){ 
    int temp = 0; 
    temp = A[i]; 
    A[i] = A[j]; 
    A[j] = temp; 
} 

public static int[] MyAlgorithm(int[] A, int n){ 

    boolean done = true; 
    int j =0; 
    while(j<=(n-2)){ 
     if(A[j]>A[j+1]){ 
      swap(A,j,j+1); 
      done = false; 
     } 
     j = j+1; 
    } 
    j = n-1; 

    while(j>=1){ 
     if(A[j]<A[j-1]){ 
      swap(A, j-1,j); 
      done = false; 
     } 
     j = j-1; 
    } 

    if(done==false){ 
     MyAlgorithm(A,n); 
    } 

    return A; 
} 
+0

Вы никогда не достигнете O (n) для алгоритма сортировки. – GriffeyDog

+0

Это двухсторонняя сортировка пузырьков, так что это 'O (n²)' как тип пузыря. –

+0

@GriffeyDog Это справедливо только для сортировки на основе сравнения. Другие алгоритмы могут обменять увеличенную пространственную сложность для улучшения временной сложности (например, сортировка по методу radix). – chepner

ответ

2

Это O (n^2) (для списка [n, n-1, ..., 1]), Omega (n) для [1, 2, ..., n].

+0

Пожалуйста, не могли бы вы объяснить =) – user2336315

+0

Если список уже отсортирован, вы никогда не устанавливаете 'done = false', поэтому функция' A' вызывается один раз. Если он отсортирован в обратном порядке, то сначала, когда цикл установит максимальный элемент до конца, второй пока установит минимальный элемент на передней панели и так далее. Таким образом, для сортировки списка в обратном порядке потребуются вызовы 'n/2'' A'. –

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