Итак, я сортирую связанный список пар чисел (int и double). Мне нужно рассчитать временную сложность этого алгоритма. До сих пор я рассчитал, что мой алгоритм разбиения - это O (n), но я сейчас потерял, как это вычислить. Вот код моего алгоритма:
public void quicksort(Node start, Node end)
{
if (start == end)//c16 1
{
return; //c17 1
}
Node pivot_prev = partition(start, end); // Tpartition
quicksort(start, pivot_prev); // Tquicksort
if (pivot_prev != null && pivot_prev == start) //c18
{
quicksort(pivot_prev.next, end); // Tquicksort
}
if (pivot_prev != null && pivot_prev.next == end)
{
return;
}
else if (pivot_prev != null && pivot_prev.next != null)
{
quicksort(pivot_prev.next.next, end);
}
}
Добавлен метод разбиения, потому что он отсутствует
public Node partition(Node start, Node end)
{
if (start == end || start == null || end == null) // c1
return start; //c2
Node pivot_prev = start; //c3
Node curr = start; //c4
Pair pivot = end.data; //c5
Pair temp; //c6
while(start != end) // c7 n+1
{
operacijos = operacijos + 1;
if (start.data.integer < pivot.integer)// c8 n
{
pivot_prev = curr; //c9 n
temp = curr.data; //c9 n
curr.data = start.data; //c9 n
start.data = temp; //c9 n
curr = curr.next; //c9 n
}
if (start.data.integer == pivot.integer) //c10 n
{
if (start.data.doubl <= pivot.doubl) //c11 n
{
pivot_prev = curr; //c12 n
temp = curr.data; //c12 n
curr.data = start.data; //c12 n
start.data = temp; //c12 n
curr = curr.next; //c12 n
}
}
start = start.next; //c13 n
operacijos += 1;
}
temp = curr.data;//c14
curr.data = pivot;//c14
end.data = temp;//c14
operacijos += 3;
return pivot_prev;//c15
}