Функция сортировки меняет числа в моем массиве - PullRequest
0 голосов
/ 10 февраля 2020

Я пытался реализовать функцию сортировки вставкой, но у нее странное поведение. Проблема возникает, когда я пытаюсь использовать только [0,1000], и она преобразует все числа в моем массиве в [0,9]. Если я увеличу числа выше 1000, это будет прекрасно работать, но все, что ниже, просто победит. Есть идеи почему?

public static void insertSort(int[] array) {
    for (int a : array) {
        System.out.print(array[a] + " ");
    }
    int length = array.length;
    for (int i = 1; i < length; i++) {
        int key = array[i];
        int j = (i - 1);
        while (j > -1 && array[j] > key) {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = key;
    }
    for(int b:array) {
        System.out.print(array[b] + " ");
    }
}

createdArray = new int[100000];
    for (int i = 0; i < 100000; i++) {
        double x = (Math.random() * 1000); // if i increase to *10000, it works fine
        createdArray[i] = (int) x;}

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

Это не то, как l oop пропускает и печатает значение массива

for (int a : array) {
    System.out.print(array[a] + " ");
}

a - это фактическое значение , а не индекса, так что вы можете просто сделать

for (int a : array) {
    System.out.print(a + " ");
}

аналогично для

for(int b:array) {
    System.out.print(array[b] + " ");
}
0 голосов
/ 10 февраля 2020

Вот ваш код с проблемами в нем:

 for (int a : array) {
        System.out.print(array[a] + " ");
    }

 for(int b:array) {
        System.out.print(array[b] + " ");
    }

Вы используете переменную, которую вы должны печатать как index . Вы можете просто напечатать саму переменную.

 for (int a : array) {
   System.out.print(a + " ");
 }

 for(int b:array) {
   System.out.print(b + " ");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...