Insertion Sort - подсчет количества инверсий - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь подсчитать количество инверсий с учетом набора данных.Это хорошо работает для небольших наборов данных, но как только я выбираю один из нескольких тысяч, инвертированное значение получается отрицательным.Я не вижу, как это возможно, кто-нибудь знает, почему это происходит / потенциальные исправления?

Например, при заданном наборе данных 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 голосов
/ 26 сентября 2019

Максимальное значение int в Java - 2147483647, скорее всего, произошло переполнение.Вместо этого попробуйте использовать long.

Если вам нужна дополнительная информация, выполните поиск переполнения целых чисел в Википедии.

...