Борьба во временной сложности при внедрении расширенной сортировки вставки

-4

Я реализую расширенную сортировку вставки, которая напрямую подсчитывала, сколько сдвигов (или свопов) требуется для сортировки вставки, чтобы закончить сортировку массива, и с этой реализацией я смогу передать несколько тестовых примеров в одном входе, я ее реализовал но все еще борется со сложностью во времени, пытаясь найти лучшее решение.

Это моя программа.

public class Solution {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);
int T = in.nextInt();
int[][] ar = new int[T][];
for(int i=0;i<T;i++){
int columnSize;
columnSize = in.nextInt();
ar[i] = new int[columnSize];
for(int j=0;j<ar[i].length;j++)
{
ar[i][j]=in.nextInt();
}
}

int starttTime = (int) System.currentTimeMillis();
for(int i=0;i<T;i++)
{ int count=0,i1,k;

for(int j=1;j<ar[i].length;j++)
{
k=ar[i][j];
for(i1=j-1; i1>=0 && k<ar[i][i1]; i1--)
{ar[i][i1+1]=ar[i][i1];
count++; }
ar[i][i1+1]=k;

}
System.out.println(count);

}
int endTime = (int) System.currentTimeMillis();
System.out.println(endTime - starttTime);
}
}

спросил(а) 2020-03-25T17:52:51+03:00 2 месяца назад
1
Решение
53

В качестве подсказки: количество свопов, выполняемых сортировкой вставки, в точности равно числу инверсий в массиве. Существует знаменитый алгоритм O (n log n) для подсчета инверсий, поэтому вы можете изучить его как вариант.

Надеюсь это поможет!

ответил(а) 2020-03-25T18:06:57.875675+03:00 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема