2016-12-09 8 views
0

Я написал функцию сортировки штампов времени (hh:mm:ss) в порядке от старых до новейших. Мне интересно узнать приблизительное худшее время работы моего кода, но я не знаю, как это определить.Время работы алгоритма сортировки

Мое приблизительное предположение: O(n-1)^2 из-за вложенных for loop. Я прав ?

Если нет, то может ли кто-нибудь определить, какое будет приблизительное время работы моего кода в Big O?

public void sortTimeStamp(SortTime timestamps[]) 
{ 
    for(int i=0;i<timestamps.length-1;i++) 
    { 
     for(int j=0;j<timestamps.length-1;j++) 
     { 
      if(timestamps[j].hour > timestamps[j+1].hour) 
      { 
       swap_timestamps(timestamps, j); 
      } 
      else 
      if(timestamps[j].hour == timestamps[j+1].hour) 
      { 
       if(timestamps[j].minutes > timestamps[j+1].minutes) 
       { 
        swap_timestamps(timestamps, j); 
       } 
       else 
       if(timestamps[j].minutes == timestamps[j+1].minutes && timestamps[j].seconds > timestamps[j+1].seconds) 
       { 
        swap_timestamps(timestamps, j); 
       } 

      } 
     } 
    } 
} 

функция Своп

public void swap_timestamps(SortTime timestamps[], int index) 
    { 
     SortTime temp = timestamps[index]; 
     timestamps[index] = timestamps[index+1]; 
     timestamps[index+1] = temp; 
    } 
+0

why' for (int i = 0; i <4; i ++) '? это означает, что в вашем массиве всегда будет 4 элемента d? – jsalatas

+0

Да, это выглядит как «O (n^2)», предполагая, что ваши петли намереваются перебирать всю длину объекта/коллекции SortTime. –

+0

https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ – Chewtoy

ответ

4

Я думаю, что этот алгоритм сортировки является O (N^2).
Ваш ответ O((n-1)^2), и он равен O(n^2-2n+1).
Но большой-O обозначения O(f(n)) означает «время примерно пропорционально для f(n)» (не совсем правильно, но это легко понять)
Таким образом, вы не должны думать -2n или 1 срок.
Вы можете только думать о терминах n^2, и вам не нужны никакие коэффициенты.

Но вы можете делать mergesort и сложность времени O (n log n)
Сортировка сортировки в порядке, потому что hh: mm: ss может выражать только 86400 способов. Он выполняет O (n + k), где k = 86400.

+0

Спасибо за ваш ответ. +1 для простого объяснения. – Yousaf

+0

Спасибо. Наслаждайтесь изучением алгоритмов :-) – square1001

+1

Стоит упомянуть, что нотация O (n) применяется, когда n велико, поэтому может применяться теория ограничений. При n-> Inf, то O (n^2-2n + 1) -> O (n^2). – patrik

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