Question

In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 pro...

In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 processes. First half of the array will be sorted by thread 1 and the second half by thread 2. When the threads complete their tasks, the main program will merge the half arrays.

You should not waste your time on merge-sort algorithm. Use the merge sort algorithm given below

Languaga is C platform Ubuntu

0 0
Add a comment Improve this question Transcribed image text
Answer #1

#include <stdio.h>
#include <pthread.h> // header file in c to use thread in c.
#include <stdlib.h>

#define NOTHREADS 2 // no of threads

int a[] = {14, 18, 15, 12, 13, 16, 7, 1, 4, 9};

typedef struct node {
int i;
int j;
} NODE;

void merge(int i, int j) // function for merging the two array.
{
int mid = (i+j)/2;
int ai = i;
int bi = mid+1;

int newa[j-i+1], newai = 0;

while(ai <= mid && bi <= j) {
if (a[ai] > a[bi])
newa[newai++] = a[bi++];
else
newa[newai++] = a[ai++];
}

while(ai <= mid) {
newa[newai++] = a[ai++];
}

while(bi <= j) {
newa[newai++] = a[bi++];
}

for (ai = 0; ai < (j-i+1) ; ai++)
a[i+ai] = newa[ai];

}

void * mergesort(void *a) // function for merge sort
{
NODE *p = (NODE *)a;
NODE n1, n2;
int mid = (p->i+p->j)/2;
pthread_t thread1, thread2; // declaring the two threads.
int retur;

n1.i = p->i; //n1 for first half of array.
n1.j = mid;

n2.i = mid+1; // n2 for second half of array.
n2.j = p->j;

if (p->i >= p->j) return 0;

retur = pthread_create(&thread1, NULL, mergesort, &n1);
if (retur) {
printf("%d %s - unable to create thread - ret - %d\n", __LINE__, __FUNCTION__, retur);
exit(1);
}


retur = pthread_create(&thread2, NULL, mergesort, &n2);
if (retur) {
printf("%d %s - unable to create thread - ret - %d\n", __LINE__, __FUNCTION__, retur);
exit(1);
}

pthread_join(thread1, NULL);
pthread_join(thread2, NULL);

merge(p->i, p->j);
pthread_exit(NULL);
}


int main() // main function for calling every function. and showing the final sorted array.
{
int i;
NODE m;
m.i = 0;
m.j = 9;
pthread_t thread;

int retur;

retur=pthread_create(&thread, NULL, mergesort, &m);
if (retur) {
printf("%d %s - unable to create thread - ret - %d\n", __LINE__, __FUNCTION__, retur);
exit(1);
}

pthread_join(thread, NULL);

for (i = 0; i < 10; i++)
printf ("%d ", a[i]);

printf ("\n");

// pthread_exit(NULL);
return 0;
}

output
input 1 47 9 12 13 14 15 16 18 .. .Program finished with exit code 0 Press ENTER to exit console.

Add a comment
Know the answer?
Add Answer to:
In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 pro...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 processes....

    In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 processes. First half of the array will be sorted by thread 1 and the second half by thread 2. When the threads complete their tasks, the main program will merge the half arrays. You should not waste your time on merge-sort algorithm. Use the merge sort algorithm given below Languaga is C platform Ubuntu

  • In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 pro...

    In this assignment you will implement merge-sort algorithm by creating 2 threads instead of 2 processes. First half of the array will be sorted by thread 1 and the second half by thread 2. When the threads complete their tasks, the main program will merge the half arrays. You should not waste your time on merge-sort algorithm. Use the merge sort algorithm given below void mergesort(int a[],int i,int j) { int mid; if(i<j) { mid=(i+j)/2; mergesort(a,i,mid); //left recursion mergesort(a,mid+1,j); //right...

  • Sorting Threads Assignment Overview Write a multithreaded sorting program in Java which uses the ...

    Sorting Threads Assignment Overview Write a multithreaded sorting program in Java which uses the merge sort algorithm. The basic steps of merge sort are: 1) divide a collection of items into two lists of equal size, 2) use merge sort to separately sort each of the two lists, and 3) combine the two sorted lists into one sorted list. Of course, if the collection of items is just asingle item then merge sort doesn’t need to perform the three steps,...

  • Consider a variation of Merge sort called 4-way Merge sort. Instead of splitting the array into...

    Consider a variation of Merge sort called 4-way Merge sort. Instead of splitting the array into two parts like Merge sort, 4-way Merge sort splits the array into four parts. 4-way Merge divides the input array into fourths, calls itself for each fourth and then merges the four sorted fourths. a)Implement 4-way Merge sort from Problem 4 to sort an array/vector of integers and name it merge4. Implement the algorithm in the same language you used for the sorting algorithms...

  • Find the space complexity of Merge Sort below as a function of n (the length of...

    Find the space complexity of Merge Sort below as a function of n (the length of A). Assume: • The elements of A require (1) space. • Merge takes 2 sorted arrays as input and merges them into one sorted array containing both inputs' elements in (n) space. A (there is no index trickery allowing Al and A2 Note that Al and A2 are independent arrays from to be "in" A; A is not being sorted in place). Merge Sort...

  • HW58.1. Array Merge Sort You've done merge (on Lists), so now it's time to do merge...

    HW58.1. Array Merge Sort You've done merge (on Lists), so now it's time to do merge sort (on arrays). Create a public non-final class named Mergesort that extends Merge. Implement a public static method int[] mergesort(int[] values) that returns the input array of ints sorted in ascending order. You will want this method to be recursive, with the base case being an array with zero or one value. If the passed array is null you should return null. If the...

  • Please give a output Linux/Ubuntu and how to run it (compile) this program ,my assigment is below...

    Please give a output Linux/Ubuntu and how to run it (compile) this program ,my assigment is below : : Merge Sort algorithm using 2 processes a.) Define an integer array of 100 integers. Populate this array with random numbers. You can use int rand(void); function. Do not forget to initialize this function. You will sort the numbers in the array using merge-sort algorithm. In merge sort algorithm the half of the array will be sorted by one process and second...

  • Implement and compare sorting algorithms. The task is to sort a list of integers using 5...

    Implement and compare sorting algorithms. The task is to sort a list of integers using 5 sorting algorithms: selection sort insertion sort merge sort heap sort quicksort Your program should include 5 separate sorting methods, though it is fine for them to call some common methods (like "swap") if needed. Each sorting method should also count the number of comparison operations and assignment operations on the array elements during the sorting process. In the main program, two types of array...

  • Implement in C SharpCreate a new algorithm based on the algorithm, selection sort. The new algorithm...

    Implement in C SharpCreate a new algorithm based on the algorithm, selection sort. The new algorithm should be able to sort an array like this: Input: an array that has n elements, and the values of its elements are assigned randomly, for example: Index 0 1 2 3 4 5 value 7 3 6 2 1 5 Output: an array - its first n/2 elements are sorted in ascending order and its second n/2 elements sorted in descending order. That...

  • This assignment will test your algorithm/logic development in which you will perform the sort function with some different characteristics.

    This assignment will test your algorithm/logic development in which you will perform the sort function with some different characteristics. You will be required to ensure that your program meets the following requirements: i.    Existence of an array which can accept an unknown number of positive integersii.    ExistenceofafunctionwhichcanperformadifferentsortwheretheEvennumberswillappear first before the Odd numbers. In this sorted sequence, all the even numbers will appear first in descending order followed by the odd numbers (in the same order). You are only allowed to use one...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT