# Lab: Insertion Sort

Summary: In this lab, we explore a variety of issues related to the insertion sort algorithm.

Contents:

## Exercises

### Exercise 0: Preparation

a. Start DrScheme.

b. Copy the code from the accompanying reading into DrScheme.

### Exercise 1: Testing Insert

a. Test both versions of the `insert-number` procedure from the reading by inserting a number

• into an empty list;
• into a list of larger numbers, arranged in ascending order;
• into a list of smaller numbers, arranged in ascending order;
• into a list of both larger and smaller numbers, arranged in ascending order; and
• into a list the contains multiple copies of the number to be inserted.

b. What happens if `ls` is not in ascending order when `insert-number` is invoked?

### Exercise 2: Inserting Strings

Write a new `insert-string` procedure that inserts a string into a list of strings that are in alphabetical order:

```> (insert-string "dog" (list "ape" "bear" "cat" "emu" "frog"))
("ape" "bear" "cat" "dog" "emu" "frog")
```

In case you've forgotten, `string<?` and `string-ci<?` are useful predicates for comparing strings for order.

You may not use the generalized `insert` procedure in writing this procedure.

### Exercise 3: Generalizing Insertion

a. Show how to call the generalized `insert` procedure using lists of strings.

b. Show how to call the generalized `insert` procedure using lists of numbers.

c. Redefine `insert-string` so that it uses `insert` as a helper procedure.

### Exercise 4: Displaying Steps in Insertion Sort

a. Add calls to the `display` and `newline` procedures to the body of the helper in `insertion-sort-numbers` so that it displays the values of `unsorted` and `sorted`, appropriately labeled, at each step of the sorting process.

b. Use the revised `insertion-sort-numbers` procedure to sort the values 7, 6, 12, 4, 10, 8, 5, and 1.

### Exercise 5: Checking Potential Problems

Test the `insertion-sort-numbers` procedure on some potentially troublesome arguments:

• an empty list,
• a list containing only one element,
• a list containing all equal values,
• a list in which the elements are originally in descending numerical order.

### Exercise 6: Generalizing Insertion Sort

Document, write, and test a procedure, `(insertion-sort list may-precede?)`. that generalizes the `insertion-sort-numbers` procedure.

## History

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Tue Dec 9 13:59:04 2003.
The source to the document was last modified on Fri Nov 21 12:20:37 2003.
This document may be found at `http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2003F/Labs/insertion-sort.html`.

You may wish to validate this document's HTML ; ; Check with Bobby

Samuel A. Rebelsky, rebelsky@grinnell.edu