Java объединяет два массива в один и сортирует их - PullRequest
0 голосов
/ 26 февраля 2019

Моя задача - объединить два массива в один и отсортировать их.Я уже объединил массивы, но не могу их отсортировать.
Моя идея: создать новый массив.В объединенном массиве через цикл найдите наименьший элемент, поместите его в новый массив и, в конце концов, сделайте его наибольшим числом.Однако этот подход не работает.
Мой код:

public class Concat_arrays {
public static void main(String[] args) {
    int[] a1 = {4, 5, 3, 2, 1};
    int[] a2 = {10, 29, 0};
    int[] a3 = new int[a2.length+a1.length];

    int index = 0;
    for (int i = index; i<a1.length; i++) {
        a3[i] = a1[i];
        index++;
    }

    int indexA2 = 0;
    while (indexA2<a2.length) {
        a3[index] = a2[indexA2];
        index++;
        indexA2++;
    }

    int[] a4 = new int[a3.length];

    for (int i = 0; i<a3.length; i++) {
        int min_index = getMin(a3);
        a4[i] = a3[min_index];
        a3[min_index] = 999999;
    }




}

public static int getMin(int[] array) {
    int min_element = 0;
    int min_element_index = 0;

    for (int i = 0; i<array.length; i++) {
        if (min_element>=array[i]) {
            min_element_index = i;
        }
    }
    return min_element_index;
}

Вывод:

4
999999
999999
999999
999999
999999
999999
999999

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете использовать Java Streams, особый вид коллекций:

int[] a1 = {4, 5, 3, 2, 1};
int[] a2 = {10, 29, 0};

Stream<Integer> a1Stream = Stream.of(4, 5, 3, 2, 1);
Stream<Integer> a2Stream = Stream.of(10, 29, 0);

Stream<Integer> finalArray = Stream.concat(a1Stream, a2Stream).sorted();
finalArray.forEach(s -> System.out.println(s));
0 голосов
/ 26 февраля 2019

Вы на правильном пути в своей идее, но ваш getMin метод неверен.Я обновил это ниже.(Ваша идея может быть улучшена)

public static int getMin(int[] array) {
    int min_element = Integer.MAX_VALUE; // Do not set it to 0 since there might be elements that has the value of 0
    int min_element_index = 0; 
    for (int i = 0; i < array.length; i++) {
        if (min_element >= array[i]) {
            min_element = array[i]; // You have to update your minimum element
            min_element_index = i;
        }
    }
    return min_element_index;
}

Также в этой части a3[min_index] = 999999; лучше установить ее на a3[min_index] = Integer.MAX_VALUE;, так как могут быть элементы, которые больше, чем 999999.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...