插入排序-计算倒置次数

时间:2019-09-25 21:21:40

标签: java arrays insertion-sort

我正在尝试计算给定数据集的反转次数。它适用于小型数据集,但是一旦我选择了几千个反转值,它就会变成负值。我看不到这是怎么可能的,有人知道为什么会这样/潜在的解决方法吗?

例如,假设数据集为5(-6、1、15、8、10),则取反值为2。但是对于更长的数据集,我得到-2032112517取反。

    public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);
        System.out.println("Enter length of array: ");
        int input= userInput.nextInt();
        int[] values = new int[input];
        for (int i = 0; i < values.length; i++)
        {
            values[i] = userInput.nextInt();
        }
        insertionSort(values);

    }
    public static void insertionSort(int values[ ]) {
        int arrlen = values.length;
        int invert = 0;
        for (int i = 0; i < arrlen; i++) {
            int currentValue = values[i];
            int compare = i - 1;
            while (compare >= 0 && values[compare] > currentValue) {
                invert++;
                values[compare + 1] = values[compare];
                compare = compare - 1;
            }
            values[compare + 1] = currentValue;

        }
        System.out.println("INVERT IS: " +invert);

    }

}

1 个答案:

答案 0 :(得分:0)

Java中的最大int值为2147483647,很可能发生了溢出。尝试使用long代替。

如果您想了解更多信息,请在Wikipedia上搜索Integer溢出。