1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
GaryK [48]
3 years ago
14

Write code for iterative merge sort algorithm. It is also known as bottom-up merge sort. There should not be any recursive call

for this approach. Include your code and screenshot of output with the answer. You can choose any programming language for this problem.

Computers and Technology
1 answer:
krek1111 [17]3 years ago
4 0

Answer:

Here is the C++ program:

#include <iostream> // for using input output functions

using namespace std; // to identify objects as cin cout

void merge(int array[], int left, int mid, int right);  

// to merge the  array into two parts i.e. from left to mid and mid+1 to right

int minimum(int a, int b) { return (a<b)? a :b; }

//to find the minimum of the 2 values

void IterativeMergeSort(int array[], int num) { //function to sort the array

  int size; //determines current size of subarrays

  int left;  //to determine the start position of left subarray

//to merge the sub arrays using bottom up approach          

  for (size=1; size<=num-1; size = 2*size)    {

      //to select start position of different subarrays of current size  

      for (left=0; left<num-1; left += 2*size)   {    

// To determine the end point of left sub array and start position of right //which is mid+1    

          int mid = minimum(left + size - 1, num-1);  

          int right = minimum(left + 2*size - 1, num-1);  

// Merge the sub arrays from left to mid and mid+1 to right

         merge(array, left, mid, right);        }    } }

 // function to merge the  array into two parts i.e. from left to mid and mid+1 //to right

void merge(int array[], int left, int mid, int right){

   int i, j, k; // variables to point to different indices of the array

   int number1 = mid - left + 1;

   int number2 =  right - mid;  

//creates two auxiliary arrays LEFT and RIGHT

   int LEFT[number1], RIGHT[number2];  

//copies this mid - left + 1 portion to LEFT array

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

       LEFT[i] = array[left + i];

//copies this right - mid portion to RIGHT array

   for (j = 0; j < number2; j++)

       RIGHT[j] = array[mid + 1+ j];  

   i = 0;

   j = 0;

   k = left;

//merge the RIGHT and LEFT arrays back to array from left to right i.e //arr[left...right]

   while (i < number1 && j < number2)     {

       if (LEFT[i] <= RIGHT[j])    

/*checks if the element at i-th index of LEFT array is less than or equals to that of j-th index of RIGHT array */

{             array[k] = LEFT[i];

//if above condition is true then copies the k-th part of array[] to LEFT //temporary array

           i++;         }

       else //when the above if condition is false

       {  array[k] = RIGHT[j];

//moves k-th part of array[] to j-th position of RIGHT temporary array

           j++;         }

       k++;     }  

   while (i < number1)     {  //copies remaining elements of LEFT array

       array[k] = LEFT[i];

       i++;

       k++;     }  

   while (j < number2)     { //copies remaining elements of RIGHT array

       array[k] = RIGHT[j];

       j++;

       k++;     } }  

int main() {

   int Array[] = {9, 18, 15, 6, 8, 3}; // an array to be sorted

   int s = sizeof(Array)/sizeof(Array[0]);

//sizeof() is used to return size of array

   cout<<"Input array:  ";

   int i;

   for (i=0; i < s; i++) //to print the elements of given array

       cout<<Array[i]<<" ";

       cout<<endl;

   IterativeMergeSort(Array, s);   //calls IterativeMergeSort() function

   cout<<"Sorted array after applying Iterative Merge Sort:"<<endl;

  for (i=0; i < s; i++) //to print the elements of the sorted array

      cout<<Array[i]<<" "; }

Explanation:

The program is well explained in the comments mentioned above with each line of the code. The screenshot of the program along with its output is attached.

You might be interested in
How to write a function that counts the letters in a string in C?
stiv31 [10]

Answer:

Here is the C function that counts the letters in a string:

int LetterCount(char string[]){  //function to count letters in a string passed as parameter

 string[100];  // char type string with size 100

  int i, letters;  // letter variable stores the count for no. of letters in string

   i = letters = 0;  //initialize variables i and letters to 0

  while (string[i] != '\0')  { // loop iterates through the entire string until end of string is reached

    if( (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= 'A' && string[i] <= 'Z') )  { // if condition checks the letters in the string

     letters++;    }  // increments 1 to the count of letters variable each time a letter is found in the string

    i++;  }  //increments value of i to move one character forward in string

   printf("Number of Letters in this String = %d", letters);   // displays the number of letters in the string

   return 0; }                              

Explanation:

Here the question means that the function should count the letters in a string. So the letters are the alphabets from a to z and A to Z.

Here is the complete program:

#include <stdio.h>   // to use input output functions

int LetterCount(char string[]){  // method that takes a character string as parameter and counts the letters in the string

string[100];  

int i, letters;

i = letters = 0;

while (string[i] != '\0')   {

 if( (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= 'A' && string[i] <= 'Z'))

   {letters++;  }

   i++; }

   printf("Number of Alphabets in this String = %d", letters);  

   return 0;}  

int main(){  // start of main function

  char string[100];  //declares a char array of string

   printf("Please Enter a String : ");   //prompts user to enter a string

  fgets(string,100,stdin);  //get the input string from user

   LetterCount(string); } // calls method to count letters in input string

I will explain this function with an example

Lets suppose the user input "abc3" string

string[100] = "abc3"

Now the function has a while loop that while (string[i] != '\0')  that checks if string character at i-th position is not '\0' which represents the end of the character string. As value of i = 0 so this means i is positioned at the first character of array i.e. 'a'

At first iteration:

i = 0

letter = 0

if( (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= 'A' && string[i] <= 'Z') )   if condition checks if the character at i-th position of string is a letter. As the character at 0-th position of string is 'a' which is a letter so this condition evaluates to true. So the statement letter++ inside if condition executes which increments the letter variable to 1. So the value of letter becomes 1. Next statement i++ increments the value of i to 1. So i becomes 1. Hence:

i = 1

letter = 1

At second iteration:

i = 1

letter = 1

if( (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= 'A' && string[i] <= 'Z') )  

if condition checks if the character at i-th position of string is a letter. As the character at 1st position of string is 'b' which is a letter so this condition evaluates to true. So the statements letter++ inside if condition and i++ executes which increments these variables to 1. Hence:

i = 2

letter = 2

At third iteration:

i = 2

letter = 2

if( (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= 'A' && string[i] <= 'Z') )  

if condition checks if the character at i-th position of string is a letter. As the character at 2nd position of string is 'c' which is a letter so this condition evaluates to true. So the statements letter++ inside if condition and i++ executes which increments these variables to 1. Hence:

i = 3

letter = 3

At fourth iteration:

i = 3

letter = 3

if( (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= 'A' && string[i] <= 'Z') )  

if condition checks if the character at i-th position of string is a letter. As the character at 3rd position of string is '3' which is not a letter but a digit so this condition evaluates to false. So the statement letter++ inside if condition does not execute. Now i++ executes which increments this variable to 1. Hence:

i = 4

letter = 3

Now the loop breaks because while (string[i] != '\0') condition valuates to false as it reaches the end of the string.

So the statement: printf("\n Number of Letters in this String = %d", letters); executes which prints the value of letters on the output screen. Hence the output is:

Number of Letters in this String = 3

3 0
3 years ago
Which web browser was created by Google?
Natali5045456 [20]

Answer:

Chrome

Explanation:

6 0
3 years ago
Read 2 more answers
Please fill these out. I really need this done.
tatyana61 [14]

Answer:

i can't see this

Explanation:

5 0
3 years ago
Which social networking site became a gaming platform after 2009?
Art [367]
It is hi5 if I’m a Plato class
8 0
3 years ago
Read 2 more answers
Which layer in the Transmission Control Protocol/Internet Protocol (TCP/IP) model is responsible for delivering data between two
s2008m [1.1K]

Answer:

Network.

Explanation:

The Transmission Control Protocol/Internet Protocol (TCP/IP) model is a standard networking protocol which allows network devices such as routers, switches, and host computers to interconnect and communicate with one another over a network. The Transmission Control Protocol/Internet Protocol (TCP/IP) model comprises of four (4) layers and these includes;

I. Application layer.

II. Transport layer.

III. Internet layer.

IV. Network layer.

The network layer in the Transmission Control Protocol/Internet Protocol (TCP/IP) model is responsible for delivering data between two nodes.

Basically, this layer known as network layer is the fourth layer of the Transmission Control Protocol/Internet Protocol (TCP/IP) model and it is typically responsible for the transmission of packets from one network device to another.

4 0
3 years ago
Other questions:
  • Ten 9600-bps lines are to be multiplexed using TDM. a. Ignoring overhead bits in the TDM frame, what is the total capacity requi
    6·1 answer
  • Which BI tool or technique would be most useful in predicting the likelihood of a fire in a building? a. Data mining b. Dashboar
    9·1 answer
  • The graph of which function has an axis of symmetry at x=-1/4​
    15·1 answer
  • Describe how mendeleev organized the elements into rows and columns in his periodic table.
    12·1 answer
  • Which word processing file that contains text and other
    13·2 answers
  • Given the three side lengths, how can you tell if a triangle<br>is a right triangle?​
    5·1 answer
  • Describe markings on a road that indicate that it is safe to pass.
    10·1 answer
  • Which of the following sentences use personification 
    9·1 answer
  • HELP ASAP, AND YES I KNOW, WRONG CATEGORY. SORRY!
    10·2 answers
  • it refers to the ability of different parts of a computer to work together as one. please answer this​
    6·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!