CS 112b
Spring 2004
Ileana Streinu

Homework 3

Thursday February 12, 2004
Program due Wednesday 2/18/2000 by midnight,
pseudo-code to be handed in on Thursday 2/19/2000, 10:30am (before class).


Outline

Your task is to write in C++ three programs implementing variations on two sorting algorithms. The first two programs are based on Selection Sort and should be named sort1.cpp and sort2.cpp, the third implements Insertion Sort and should be named sort3.cpp.

Each program should contain all the necessary functions and the main program in one file, named as indicated. You will submit them in hw3, together with a typescript file.

For Insertion Sort you will also have to submit handwritten pseudo-code, which is due on Th Feb. 19, at 10:30am (before class).

To make the task of testing and grading this homework easier for me and the TA, your programs should have a very basic user interface. Without prompting the user, they will just read the input as a sequence of positive elements separated by spaces and ending with a special element, which should not be part of the array to be sorted. For integer arrays, the special element should be 0 (the zero integer), for character arrays it should be a .(dot character) and for CustRec arrays, it should be 0 (assuming that no id of any customer is 0).

The output should appear on a separate line, with the values separated by spaces.

The internal array(s) used for all these programs should have a size of at least 25 elements.

The typescript file should be named exactly like this, and should be short and readable - in particular, it should NOT contain any junk from emacs executions. It should show just the compilation and execution of these three programs, one after another, on appropriately chosen input arrays.

Please remember the rules for structuring your program that I have given you, make your code readable and be generous with comments. No late submissions will be accepted.

Details below.

sort1.cpp

This program is based on the Selection Sort program we designed in class on Tuesday. Your task is to implement the algorithm for sorting an array of records of type CustRec (defined in Lecture 6). Since the CustRec structure has two fields, you can sort by any of them.

The main program calls a function to reads the input array from the user, then sorts it by each field and prints it each time on the standard output (terminal).


sort2.cpp

This program is similar (almost identical!) to sort1.cpp, except that this time the sorting function should be implemented as a template. The main program should test the sorting algorithm on two sets on inputs, first on an array of integers, then on an array of characters. The input functions obey the rule of simple interface described above (whereas an array is entered as a sequence of elements ending with the special element), and should be invoked in the order: integers first, then characters. For example, a possible data set might look like:

10 3 6 8 2 1 9 0

g y h q a n b c .


sort3.cpp

This is the creative part of the homework. It asks you to implement Insertion Sort, another algorithm for sorting, which I briefly described in class today. A high-level description of the algorithm is given below. The main program should be identical to the one used in the second program sort2.cpp, meaning that you will implement the algorithm as a template and test it on both integers and characters, entered in the format specified above for sort2.cpp.

You will develop the program in stages, by stepwise refinement, first on paper, as pseudo-code, then implement it. The pseudo-code development should roughly follow the same structure as the one I gave you for Selection Sort, starting with a general description in English, then refining it to include functions. All parameters to the functions should be clearly identified as IN, OUT or IN/OUT. The handwritten notes should be legible: hard to read submissions will be downgraded.


And now, here's the algorithm, described at a very high level and for integers only. If you have difficulty with understanding it, I suggest that you:

Insertion Sort

Input: an array A of integers, of size n

Output: in the same array A, the numbers in increasing order.

Algorithm: works in n-1 iterations. Before iteration i (i from 2 to n-1), the first i-1 elements of the array have been looked at and arranged in increasing order. At iteration i, the ith element of the array is inserted in the already sorted array of i-1 integers preceeding it. For this, the algorithm first searches the array from 1 through i-1 to find where the ith element would fit, then shifts to the right those elements larger than it to make room for its insertion in the array.

In the stepwise refinement of your program, you should have separate functions for searching and for shifting, invoked when inserting the current element.

Ileana Streinu