Рубрики

Временная сложность вставки сортировки при наличии O (n) инверсий?

Что такое инверсия?
Для данного массива arr [] пара arr [i] и arr [j] образует инверсию, если arr [i] j. Например, массив {1, 3, 2, 5} имеет одну инверсию (3, 2), а массив {5, 4, 3} имеет инверсию (5, 4), (5, 3) и (4, 3) , Мы обсудили алгоритм сортировки слиянием для подсчета инверсий

Какова временная сложность вставки сортировки при наличии O (n) инверсий?
Рассмотрим следующую функцию вставки сортировки.

/ * Функция для сортировки массива с использованием вставки sort * /

void insertionSort(int arr[], int n)

{

   int i, key, j;

   for (i = 1; i < n; i++)

   {

       key = arr[i];

       j = i-1;

   

       / * Переместить элементы arr [0..i-1], которые

          больше, чем ключ, на одну позицию впереди

          их текущей позиции * /

       while (j >= 0 && arr[j] > key)

       {

           arr[j+1] = arr[j];

           j = j-1;

       }

       arr[j+1] = key;

   }

}

Если мы более внимательно посмотрим на код сортировки вставки, мы можем заметить, что каждая итерация цикла while уменьшает одну инверсию. Цикл while выполняется только если i> j и arr [i] 2).

Рекомендуемые посты:

Временная сложность вставки сортировки при наличии O (n) инверсий?

0.00 (0%) 0 votes