Вот алгоритм сортировки массива с двумя рекурсивными вызовами. Я попытался рассчитать его временную сложность грубо, но не уверен. Я знаю, что два для циклов будут принимать n + n раз, но что делать с рекурсивными вызовами и как я могу их вычислить? Любой может помочь в вычислении простым математическим способом.Сложность времени алгоритма с двумя циклами и двумя рекурсивными вызовами
MySort (a[1..n] , n) {
If (n <= 2) {
If (first element > second) && (n = 2) then do
{ Interchange a[1] & a[2]; }
End if
}
Else
{ Assign value to min and max by very first element of array.
for (i : = 1 to n) do
{ If (a[i] > max) then
max = a[i];
Else if (a[i] < min) then
min = a[i]; //Get max and min element from the array. }
End for
Calculate MID value of the MAXIMUM & MINIMUM element found.
For i : = 1 to n do
{
If(a[i] < mid) then { Increment Count1 by 1; and P[Count1]=a[i] }
Else if (a[i] > mid) then { Increment Count2 by 1; and Q[Count2]=a[i] }
//Divide the major array to sub-arrays;
//Count1 and Count2 are counters to make check on the size of sub-arrays generated.
}
End for
MySort (P, Count1);
MSort (Q, Count2); }
End if}
Пожалуйста, отформатируйте правильно, с отступом, по одной строке в строке. Это невозможно прочитать. –
Я не вижу, где min, max, count1, count2 инициализированы и как вычисляется середина, так что это, скорее всего, сбой. – gnasher729
BTW. Я не вижу двух вложенных циклов; и две вложенные петли не обязательно означают O (n^2) - это зависит от цикла. – gnasher729