13.12 LAB: Merge sort   The class is the same as shown at the end of the Merge sort section, with the following changes: Numbers are entered by a user in a separate helper method, readNums(), instead of defining a specific array in main(). The first number is how many integers to be sorted, and the rest are the integers. Output of the array has been moved to the method printNums(). An output has been added to mergeSort(), showing the indices that will be passed to the recursive method calls. Add code to the merge sort algorithm to count the number of comparisons performed. Add code at the end of main() that outputs "comparisons: " followed by the number of comparisons performed (Ex: "comparisons: 12") Hint: Use a static variable to count the comparisons. Note: Take special care to look at the output of each test to better understand the merge sort algorithm. Ex: When the input is: 6 3 2 1 5 9 8 the output is: unsorted: 3 2 1 5 9 8 0 2 | 3 5 0 1 | 2 2 0 0 | 1 1 3 4 | 5 5 3 3 | 4 4 sorted: 1 2 3 5 8 9 comparisons: 8   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.    static int compare = 0;              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);                     System.out.println("\ncomparisons: " + compare);    } }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question
100%

13.12 LAB: Merge sort

 

The class is the same as shown at the end of the Merge sort section, with the following changes:

  • Numbers are entered by a user in a separate helper method, readNums(), instead of defining a specific array in main(). The first number is how many integers to be sorted, and the rest are the integers.
  • Output of the array has been moved to the method printNums().
  • An output has been added to mergeSort(), showing the indices that will be passed to the recursive method calls.

Add code to the merge sort algorithm to count the number of comparisons performed.

Add code at the end of main() that outputs "comparisons: " followed by the number of comparisons performed (Ex: "comparisons: 12")

Hint: Use a static variable to count the comparisons.

Note: Take special care to look at the output of each test to better understand the merge sort algorithm.

Ex: When the input is:

6 3 2 1 5 9 8

the output is:

unsorted: 3 2 1 5 9 8 0 2 | 3 5 0 1 | 2 2 0 0 | 1 1 3 4 | 5 5 3 3 | 4 4 sorted: 1 2 3 5 8 9 comparisons: 8

 

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.
   static int compare = 0;
         
   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);
      
      
      System.out.println("\ncomparisons: " + compare);
   }
}

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 3 steps with 4 images

Blurred answer
Knowledge Booster
Array
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education