-1

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

这是我的程序。

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);
    }
} 
4

1 回答 1

1

提示:插入排序执行的交换次数完全等于数组中的反转次数。有一个著名的 O(n log n) 算法用于计算反转,因此您可能希望将其作为一个选项进行研究。

希望这可以帮助!

于 2013-09-15T21:24:22.387 回答