Run these algorithms for different input sizes (e.g. = 500, 1000, 2000, 4000, 5000, 10000, 20000, 30000, 40000 and 50,000). You will randomly generate numbers for your input array. Record the execution time (need to take the average as discussed in the class) in a table and later plot them all in a single graph against input size. Note that you will compare these sorting algorithms for the same data set.

In addition, observe and present performance of the following two special cases:

Input array is already sorted.Input array is inversely sorted.

**Required:**

Implement the following algorithms:

1. Insertion Sort

2. Merge Sort

3. In-place quicksort (any random item or the first or the last item of your input can be pivot).

Use median-of-three as pivot.

For small subproblem size ( ), you must use insertion sort.