我正在实现高级插入排序,它直接计算插入排序完成数组排序所需的移位(或交换)次数,通过这种实现,我将能够在单个输入中传递多个测试用例,我已经实现了但仍在与时间复杂性作斗争,仍在努力寻找最佳解决方案。
这是我的程序。
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);
}
}