Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please help me fix the code to fulfill the requirement belove please: (In Java) - Thank you very much. 9.16 LAB: Merge sort The class

Please help me fix the code to fulfill the requirement belove please: (In Java) - Thank you very much.

9.16 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

Input

6 3 2 1 5 9 8

Output:

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

Input

8 1 2 3 4 5 6 8 9

Expected output: unsorted: 1 2 3 4 5 6 8 9

0 3 | 4 7

0 1 | 2 3

0 0 | 1 1

2 2 | 3 3

4 5 | 6 7

4 4 | 5 5

6 6 | 7 7

sorted: 1 2 3 4 5 6 8 9

comparisons: 12

Input: 8 9 7 6 5 4 3 2 1

Expected output: unsorted: 9 7 6 5 4 3 2 1

0 3 | 4 7

0 1 | 2 3

0 0 | 1 1

2 2 | 3 3

4 5 | 6 7

4 4 | 5 5

6 6 | 7 7

sorted: 1 2 3 4 5 6 7 9

comparisons: 12

Input

8 2 3 4 5 6 7 9 1

Expected output

unsorted: 2 3 4 5 6 7 9 1

0 3 | 4 7

0 1 | 2 3

0 0 | 1 1

2 2 | 3 3

4 5 | 6 7

4 4 | 5 5

6 6 | 7 7

sorted: 1 2 3 4 5 6 7 9

comparisons: 14

Input

8 1 5 3 7 2 6 4 8

Expected output

unsorted: 1 5 3 7 2 6 4 8

0 3 | 4 7

0 1 | 2 3

0 0 | 1 1

2 2 | 3 3

4 5 | 6 7

4 4 | 5 5

6 6 | 7 7

sorted: 1 2 3 4 5 6 7 8 c

omparisons: 17

Can you please, check the input and output for me like exactly like above please! Thank you

The code need to be fixed to have the result live above:

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 ", 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(" ");

mergeSort(numbers, 0, numbers.length - 1);

System.out.print(" sorted: "); printNums(numbers); } }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Machine Learning And Knowledge Discovery In Databases European Conference Ecml Pkdd 2022 Grenoble France September 19 23 2022 Proceedings Part 4 Lnai 13716

Authors: Massih-Reza Amini ,Stephane Canu ,Asja Fischer ,Tias Guns ,Petra Kralj Novak ,Grigorios Tsoumakas

1st Edition

3031264118, 978-3031264115

More Books

Students also viewed these Databases questions

Question

c. What groups were least represented? Why do you think this is so?

Answered: 1 week ago