Расчет сложности быстрой сортировки с помощью связанного списка - PullRequest
0 голосов
/ 13 апреля 2020

Итак, я сортирую связанный список пар чисел (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      
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...