You are on page 1of 3

Assignment Number 7

Given: 24/06/08
Due: 08/07/08

Before doing the exercise, please read very carefully the submission guidelines. If you
have any questions about the exercise, please refer to the FAQ page first. If your question
is not answered there send an email.

If the user enters invalid input your program should print "error" and main should return
the value -1.

Ex 7.1 – Merge Sort


Write a program that recursively sorts an array of numbers. It first sorts the left half of the
array, then the right half of the array and then merges to the two into a single sorted array.

The program:

• Reads an integer number, which tells how many numbers are in the array
• Reads an array of integers.
• Sorts the array.
• Prints the sorted array.

Assumptions:

• You will be given the first number.


o You have to check that it is a valid number.
o If it is valid then it gives the correct number of elements in the array.
• There are going to be up to 100 elements in the array.
o If there are more than 100 characters then the input is invalid.

You must write the following functions:

• void mergeSort(int *arr, int size)


o The function recursively sorts the array.
• void mergeArrays(int *leftArr, int leftSize,
int *rightArr, int rightSize,
int *destArr )

o The function merges the left and right arrays into destArr.

• void copyArrays(int *srcArr, int *destArr, int size)


o The function copies the source array into the destination array.

Example:

Input: 10

10 9 8 7 6 5 4 3 2 1

Output: 1 2 3 4 5 6 7 8 9 10

The file name should be: mergeSort.c

Ex 7.2 – Binary Search


Write a program that performs a binary search on a sorted array of integers.

Given a sorted array of elements and a query element, you compare the query against the
element in the middle of the array (marked in green). If they are the same then there is
nothing more to do. Otherwise, if the query is smaller than the element in the middle of
the array, then it must appear before it in the array. So you need to search in the left half
(marked in white). If it is bigger, then you need to search the right half (marked in
yellow).

You repeat this until, you find the element, or you can't divide the array no more.

The program:

• Reads an integer number, which tells how many numbers are in the array
• Reads the sorted array of integers.
• Reads an integer number, which will be the search query.
• Prints a message telling if the number appears in the array or not.
Assumptions:

• You will be given the first number.


o You have to check that it is a valid number.
o If it is valid then it gives the correct number of elements in the array.
• There are going to be up to 100 elements in the array.
o If there are more than 100 characters then the input is invalid.
o The numbers in the array are sorted.
• You will be given a query number.

You must write the following functions:

• int binarySearch(int *arr, int size, int query)


o The function performs a recursive binary search on the array.
o It compares the query against the element in the center of the array.
o The recursive call changes the pointer to the start of the array and the
size of the array.
o size represents the number of elements in the array pointed to by pointer.

Example:

Input: 13

10 15 23 26 28 31 33 36 42 49 57 101 437

57

Output: Found it

Input: 13

10 15 23 26 28 31 33 36 42 49 57 101 437

39

Output: Did not find it

The file name should be: binarySearch.c

You might also like