Project 5: Sorting and Running Time Analysis

Start: Tuesday, 10/29; Due: Monday, 11/11, by the beginning of class


Overview

During lectures, we learned about various sorting and searching algorthms. This assignment will give you practice on implementing them. What's more, you will learn about running time analysis of algorithms. You should work on this project individually.

Part 1: Running Time Analysis

During lectures, I gave you an introduction on running time analysis. For this part of the lab, please read Section 4.1 - 4.7, 4.10 (in Chapter 4) and Section 5.14 (in Chapter 5) of the textbook. And, please do all of the Participation Activities in the textbook.

Read and follow the chapters carefully. Once you have finished a partcipation activity, your progress will be saved, and I will check on your progress after the project due date.

Part 2: Natural Merge Sort

During lectures, I went through the implementation of various sorting algorithms (bubble sort, quick sort, and merge sort). For this part of the project, you will learn about a variation of merge sort (called natural merge sort).

For this part of the project, you will complete the lab section of Chapter 5 in your textbook (Secton 5.16: Natural Merge Sort). You will complete the missing codes in NaturalMergeSorter.py (in particular, the get_sorted_run_length() method and the natural_merge_sort method). Please follow the steps in the project description carefully, they should provide instructions on what you need to do for each method.

Please feel free to implement any helper functions to assist you. If your function is too long, and you can isolate any part of a function based on task, you should be constructing a helper function.

Please read and follow the instruction for the lab (in Section 5.16) carefully. You should be able to run your code as you're coding. Once you have finished, submit the code via the textbook webpage. You do not need to submit to Moodle for this task.

A Report on Run Time Analysis of Sorting Algorithms

During lectures, I went through the implementation of various sorting algorithms (bubble sort, quick sort, and merge sort). Given what you have learned about the running time analysis previously, you will write a report to analyze and compare the running time of merge sort and insertion sort empirically.

This report should be scientific in nature, and should deemphasize the process of writing code and focus on the emperical analysis of the running time of each sorting algorithm.

You are asked to compare the efficiency of merge sort and insertion sort. First, looking at each program, predict what the running time is for each algorithm (best case, worst case, and average case). Then, verify your predictions experimentally. That is, run your algorithms with randomly generated array of increasing sizes (for example, array of 10, 20, 30 ...) and write down the corresponding time for your algorithm to sort each array. How big would the arrays need to be before your algorithms (merge sort and insertion sort) are unable to produce an answer? Write down those sizes. You should present this data in tables or graphs.

In presenting numerical data in tables or graphs, your presentation is important. If you are comparing the results of two or more experiments, make sure that you place the results in the same table or the same graph so the reader can easily compare the numbers. Also, all numbers in a column should be positioned so that the decimal points are vertically aligned. (This rule applies even if the decimal point isn't explicitly shown.)

What you must do/hand in

For part 1 of this project, you need to read Section 4.6 - 4.10 (in Chapter 4) and Section 5.14 (in Chapter 5) of the textbook and do all the Participation Activities. Your progress will be saved by the textbook, and I will check after the project due date.

For part 2 of this project, you wiil complete the code in Section 5.16 of the textbook. Please read the instructions in Section 5.16 carefully and submit your code accordingly.

For part 3 of this project, you must save your report as report.doc or report.txt and submit it via Moodle.

Grading Guide

We will be using this grading guide when grading your lab.

Submission

Submit part 1 of this project via the textbook's website (your progress will be saved as you do the exercises).

Submit part 2 of this project via Section 5.16 of your textbook (be sure to read and follow the submission instruction).

Submit part 3 of this project: report.txt or report.doc, via Moodle. Be sure to select 2025 f-mcs-178-001, which is your lecture section, then click on the MCS-178 Project 5 Submission link.