I need help with this Java problem to output as it's explained in this image below: import java.util.Scanner; public class LabProgram { // Read size and create an array of size ints. // Read size ints, storing them in the array. // Return the array. public static int[] readNums() { Scanner scnr = new Scanner(System.in); int size = scnr.nextInt(); // Read array size int[] nums = new int[size]; // Create array for (int j = 0; j < size; ++j) { // Read the numsbers nums[j] = scnr.nextInt(); } return nums; // Return the array } // Output the numbers in nums, separated by spaces. // No space or newline will be output before the first number or after the last. public static void printNums(int[] nums) { for (int i = 0; i < nums.length; i++) { System.out.print(nums[i]); if (i < nums.length) { System.out.print(" "); } } } public static void merge(int[] numbers, int i, int j, int k) { int mergedSize = k - i + 1; int mergedNumbers[] = new int[mergedSize]; int mergePos; int leftPos; int rightPos; mergePos = 0; leftPos = i; rightPos = j + 1; while (leftPos <= j && rightPos <= k) { if (numbers[leftPos] < numbers[rightPos]) { mergedNumbers[mergePos] = numbers[leftPos]; ++leftPos; } else { mergedNumbers[mergePos] = numbers[rightPos]; ++rightPos; } ++mergePos; } while (leftPos <= j) { mergedNumbers[mergePos] = numbers[leftPos]; ++leftPos; ++mergePos; } while (rightPos <= k) { mergedNumbers[mergePos] = numbers[rightPos]; ++rightPos; ++mergePos; } for (mergePos = 0; mergePos < mergedSize; ++mergePos) { numbers[i + mergePos] = mergedNumbers[mergePos]; } } public static void mergeSort(int numbers[], int i, int k) { int j; if (i < k) { j = (i + k) / 2; /* Trace output added to code in book */ System.out.printf("%d %d | %d %d\n", i, j, j+1, k); mergeSort(numbers, i, j); mergeSort(numbers, j + 1, k); merge(numbers, i, j, k); } } public static void main(String[] args) { int[] numbers = readNums(); System.out.print("unsorted: "); printNums(numbers); System.out.println("\n"); mergeSort(numbers, 0, numbers.length - 1); System.out.print("\nsorted: "); printNums(numbers); }
I need help with this Java problem to output as it's explained in this image below:
import java.util.Scanner;
public class LabProgram {
   // Read size and create an array of size ints.
   // Read size ints, storing them in the array.
   // Return the array.
   public static int[] readNums() {
      Scanner scnr = new Scanner(System.in);
      int size = scnr.nextInt();                  // Read array size
      int[] nums = new int[size];                 // Create array
      for (int j = 0; j < size; ++j) {            // Read the numsbers
         nums[j] = scnr.nextInt();
      }
      return nums;                                // Return the array
   }
   // Output the numbers in nums, separated by spaces.
   // No space or newline will be output before the first number or after the last.
   public static void printNums(int[] nums) {
      for (int i = 0; i < nums.length; i++) {
         System.out.print(nums[i]);
         if (i < nums.length) {
            System.out.print(" ");
         }
      }
   }
   public static void merge(int[] numbers, int i, int j, int k) {
      int mergedSize = k - i + 1;
      int mergedNumbers[] = new int[mergedSize];
      int mergePos;
      int leftPos;
      int rightPos;
      mergePos = 0;
      leftPos = i;
      rightPos = j + 1;
      while (leftPos <= j && rightPos <= k) {
         if (numbers[leftPos] < numbers[rightPos]) {
            mergedNumbers[mergePos] = numbers[leftPos];
            ++leftPos;
         }
         else {
            mergedNumbers[mergePos] = numbers[rightPos];
            ++rightPos;
         }
         ++mergePos;
      }
      while (leftPos <= j) {
         mergedNumbers[mergePos] = numbers[leftPos];
         ++leftPos;
         ++mergePos;
      }
      while (rightPos <= k) {
         mergedNumbers[mergePos] = numbers[rightPos];
         ++rightPos;
         ++mergePos;
      }
      for (mergePos = 0; mergePos < mergedSize; ++mergePos) {
         numbers[i + mergePos] = mergedNumbers[mergePos];
      }
   }
   public static void mergeSort(int numbers[], int i, int k) {
      int j;
      if (i < k) {
         j = (i + k) / 2;
         /* Trace output added to code in book */
         System.out.printf("%d %d | %d %d\n", i, j, j+1, k);
         mergeSort(numbers, i, j);
         mergeSort(numbers, j + 1, k);
         merge(numbers, i, j, k);
      }
   }
   public static void  main(String[] args) {
      int[] numbers = readNums();
      System.out.print("unsorted: ");
      printNums(numbers);
      System.out.println("\n");
mergeSort(numbers, 0, numbers.length - 1);
      System.out.print("\nsorted:   ");
      printNums(numbers);
   }
}


Step by step
Solved in 3 steps with 1 images









