Вставка Сортировка с двумя массивами - PullRequest
0 голосов
/ 24 марта 2019

Мне нужно реализовать сортировку вставки, но я должен использовать другой массив с именем temp.В этот массив должны быть скопированы значения начальных массивов в правильном положении

Я пытался реализовать алгоритм сортировки вставок с некоторыми изменениями, которые я думал, чтобы сделать задачу

public static void insertionSort(int[] a) {
    int[] temp = new int[a.length];
    for(int indice = 0; indice < a.length; indice++) {
        int key = a[indice];
        int j = indice - 1;

        while(j>=0 && a[j] > key) {
            a[j+1] = a[j];
            j = j-1;
        }
        a[j+1] = temp[j+1];
    }
}

Iпытался использовать его с массивом с такими номерами: 5, 1, 4, 14, 21, 144, 3, но он печатается 0 0 0 0 0 0 0

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Вы не используете временный массив.Нет назначения сделано для темп.У него есть пустой массив.

Попробуйте ниже и должны отсортировать массив так, как вы хотите

 public static void main(String[] args) {

        int[] a = { 5, 1, 4, 14, 21, 144, 3 };

        int[] arr2 = insertionSort(a);
        for(int i:arr2){
            System.out.print(i);
            System.out.print(", ");
        }
    }

 public static int[] insertionSort(int[] input){    
         int temp;
         for (int i = 1; i < input.length; i++) {
             for(int j = i ; j > 0 ; j--){
                 if(input[j] < input[j-1]){
                     temp = input[j];
                     input[j] = input[j-1];
                        input[j-1] = temp;
                    }
                }
            }
            return input;
        }
0 голосов
/ 24 марта 2019

Проблема в том, что вы создаете временный массив, но не присваиваете никакое значение ни одной позиции. Поэтому, когда вы делаете «a [j + 1] = temp [j + 1];» в этом массиве ничего нет, поэтому он присваивает 0 [j + 1].

Если я правильно понял, temp должен быть копией, чтобы вы могли сделать что-то вроде этого:

int[] temp = new int[a.length]; 

for (int i = 0; i < temp.length; i++) 
{ 
    temp[i] = a[i];
}
...