Java — сортировка слиянием массивов двойников

#java

#java

Вопрос:

Я пытаюсь выполнить сортировку массива двойников, но я получаю сообщение об ошибке. Мне нужна ваша помощь, ребята.

 import java.util.Arrays;
class MergeSort {

public static void main(String args[]) {
    MergeSort ob = new MergeSort();
    double nums[] = { 1.1, 1.2, 1.3, 2.2, 1.4, 2.3, 1.5, 9.8, 7.3, 7.7, 5.2, 5.1, 9.9, 4.1, 4.3, 4.2 };
    System.out.println("Original Array:");
    System.out.println(Arrays.toString(nums));
    ob.sort(nums, 0, nums.length - 1);
    System.out.println("Sorted Array:");
    System.out.println(Arrays.toString(nums));
}

void merge(double nums[], int left, int m, int right) {
    int n1 = m - left   1;
    int n2 = right - m;

    int Left_part_arra[] = new int[n1];
    int Right_part_arra[] = new int[n2];

    for (int i = 0; i < n1;   i)
        Left_part_arra[i] = nums[left   i];
    for (int j = 0; j < n2;   j)
        Right_part_arra[j] = nums[m   1   j];

    int i = 0, j = 0;

    int k = left;
    while (i < n1 amp;amp; j < n2) {
        if (Left_part_arra[i] <= Right_part_arra[j]) {
            nums[k] = Left_part_arra[i];
            i  ;
        } else {
            nums[k] = Right_part_arra[j];
            j  ;
        }
        k  ;
    }

    while (i < n1) {
        nums[k] = Left_part_arra[i];
        i  ;
        k  ;
    }

    while (j < n2) {
        nums[k] = Right_part_arra[j];
        j  ;
        k  ;
    }
}

void sort(double nums[], int left, int right) {
    if (left < right) {
        int m = (left   right) / 2;
        sort(nums, left, m);
        sort(nums, m   1, right);
        merge(nums, left, m, right);
    }
}}
  

Я использую eclipse для написания кода, и я получаю красное подчеркивание в этой части, которую я только что добавил ** ** для выделения. Я попытался применить к нему кастинг, но десятичные дроби равнялись 0.

 for (int i = 0; i < n1;   i)
        Left_part_arra[i] = **nums[left   i];**
    for (int j = 0; j < n2;   j)
        Right_part_arra[j] = **nums[m   1   j];**
  

Заранее благодарю вас!

Комментарии:

1. Почему вы пытаетесь сохранить double (ы) в массивах int? double[] Left_part_arra[] = new double[n1]; и double[] Right_part_arra = new double[n2];

2. VTCing как опечатка.

Ответ №1:

Измените свой код на:

 double Left_part_arra[] = new double[n1];
double Right_part_arra[] = new double[n2];

for (int i = 0; i < n1;   i)
    Left_part_arra[i] = nums[left   i];
for (int j = 0; j < n2;   j)
    Right_part_arra[j] = nums[m   1   j];
  

Это дает результат:

 Original Array:
[1.1, 1.2, 1.3, 2.2, 1.4, 2.3, 1.5, 9.8, 7.3, 7.7, 5.2, 5.1, 9.9, 4.1, 4.3, 4.2]
Sorted Array:
[1.1, 1.2, 1.3, 1.4, 1.5, 2.2, 2.3, 4.1, 4.2, 4.3, 5.1, 5.2, 7.3, 7.7, 9.8, 9.9]
  

Примечание: старайтесь соблюдать соглашения об именовании переменных Java, первая буква переменных должна быть в нижнем регистре. Первая буква класса / интерфейса указана в верхнем регистре, а константы полностью записываются в верхнем регистре.
https://www.oracle.com/technetwork/java/codeconventions-135099.html