Question: Write a java program to read in a set of numbers and perform a MergeSort to arrange the numbers in ascending order. Your program is

Write a java program to read in a set of numbers and perform a MergeSort to arrange the numbers in ascending order. Your program is expected to use queues to keep track of the ascending runs in the numbers, which are portions that are already in order.

Remember: You must create a number queue to do mergeSort not arrays. It has to be Queues!

Can you fix this java code. I can't get runCount to work in test.

import java.util.Random;

public class mergeSort {

public static final int MAXSIZE = 100;

public int getQsize() {

return (MAXSIZE + lastLoc - firstLoc) % MAXSIZE;

}

public boolean fullCheck() {

return (getQsize() == MAXSIZE - 1);

}

public boolean emptyCheck() {

return (getQsize() == 0);

}

public int insert(int val) {

if (fullCheck())

return -1;

else {

numArray[lastLoc] = val;

lastLoc = (lastLoc + 1) % MAXSIZE;

return 0;

}

}

public int front() {

return numArray[firstLoc];

}

public void remove() {

if (!emptyCheck())

firstLoc = (firstLoc + 1) % MAXSIZE;

}

private int firstLoc = 0;

private int lastLoc = 0;

private int[] numArray = new int[MAXSIZE];

public int getFirstLoc() {

return firstLoc;

}

public void setFirstLoc(int firstLoc) {

this.firstLoc = firstLoc;

}

public int getLastLoc() {

return lastLoc;

}

public void setLastLoc(int lastLoc) {

this.lastLoc = lastLoc;

}

public int[] getNumArray() {

return numArray;

}

public void setNumArray(int[] numArray) {

this.numArray = numArray;

}

public void merge(int arr[], int l, int m, int r) {

int n1 = m - l + 1;

int n2 = r - m;

//Create temp arrays /

int L[] = new int[n1];

int R[] = new int[n2];

// Copy data to temp arrays /

for (int i = 0; i < n1; ++i)

L[i] = arr[l + i];

for (int j = 0; j < n2; ++j)

R[j] = arr[m + 1 + j];

// Initial indexes of first and second subarrays

int i = 0, j = 0;

// Initial index of merged subarry array

int k = l;

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

arr[k] = L[i];

i++;

} else {

arr[k] = R[j];

j++;

}

k++;

}

while(i

arr[k]=L[i];

i++;

k++;

}

}

void sort(int arr[], int l, int r)

{

if(l

int m=(int)Math.ceil((l+r)/2);

sort(arr,l,m);

sort(arr,m+1,r);

merge(arr,l,m,r);

}

}

public void printArray(int arr[], int i, int n) {

for(i=0;i

System.out.print(arr[i]+" ");

System.out.println();

}

public int runCount(mergeSort Q)

{

int count=1;

int prior=-9999;

for(int i=0;i

{

if(Q.front()

{

count++;

prior=Q.front();

Q.insert(Q.front());

Q.remove();

}

}

return count;

}

}

import java.util.Scanner;

import java.util.Random;

public class Tester {

public static void main(String[] args)

{

mergeSort queue=new mergeSort();

for(int i=0; i<10; i++)

queue.insert(new Random().nextInt(100)+1);

System.out.println("initial array");

queue.printArray(queue.getNumArray(), queue.getFirstLoc(), queue.getLastLoc());

mergeSort sort=new mergeSort();

sort.sort(queue.getNumArray(), queue.getFirstLoc(), queue.getLastLoc()-1);

System.out.println("sorted array");

queue.printArray(queue.getNumArray(), queue.getFirstLoc(), queue.getLastLoc());

System.out.println("printing all ascending runs...");

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!