Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a java program to read in a set of numbers and perform a “MergeSort” to ar

ID: 3709544 • Letter: W

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 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.

Down below is some code that can be used.

some of the code is written down below.

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;

   }

Explanation / Answer

Java Program:

import java.util.Scanner;

import java.util.LinkedList;

import java.util.Queue;

class Main

{

static void merge(int data[], int left, int middle, int right, Queue<Integer> queue)

{

int size_of_array1 = middle - left + 1;

int size_of_array2 = right - middle;

int left_array[] = new int [size_of_array1];

int right_array[] = new int [size_of_array2];

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

left_array[i] = data[left + i];

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

right_array[j] = data[middle + 1+ j];

int i = 0, j = 0;

int k = left;

while (i < size_of_array1 && j < size_of_array2)

{

if (left_array[i] <= right_array[j])

{

data[k] = left_array[i];

i++;

}

else

{

data[k] = right_array[j];

j++;

}

k++;

}

while (i < size_of_array1)

{

data[k] = left_array[i];

i++;

k++;

}

while (j < size_of_array2)

{

data[k] = right_array[j];

j++;

k++;

}

}

static void sort(int data[], int left, int right, Queue<Integer> queue)

{

if (left < right)

{

int middle = (left+right)/2;

sort(data, left, middle, queue);

sort(data , middle+1, right, queue);

merge(data, left, middle, right, queue);

}

}

static void ascending_runs(int data[], int n, Queue<Integer> queue)

{

int i;

boolean flag = false;

for (i=1; i<n; ++i)

{

if(data[i-1] <= data[i])

{

flag =true;

queue.add(data[i-1]);

}

else if(data[i-1] > data[i] && flag == true)

{

flag =false;

queue.add(data[i-1]);

queue.add(-9999); //violation in ascending run

}

}

if(data[i-2] <= data[i-1])

queue.add(data[i-1]);

}

  

public static void main(String args[])

{

int i,n,val,queue_size;

Queue<Integer> queue = new LinkedList<>();

System.out.print("Enter number of element: ");

Scanner sc = new Scanner(System.in);

n = sc.nextInt();

int[] data=new int[100];

for(i=0;i<n;i++)

{

System.out.print("Enter "+i+"'th element: ");

data[i] = sc.nextInt();

}

ascending_runs(data, n, queue);

queue_size = queue.size();

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

for (i=0; i<queue_size; ++i)

{

val = queue.remove();

if(val != -9999)

System.out.print(val + " ");

else

System.out.print(" ");

}

sort(data, 0, n-1,queue);

System.out.print(" Array after sorting: ");

for (i=0; i<n; ++i)

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

System.out.print(" ");

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote