Laboratory Exercise on Insertion Sort
Goals
The goal of this lab is to gain familiarity with the method of data sorting known as insertion sort, culminating in writing a simple insertion sort program.
Lab Exercises
Exercise 1: Reading Review
In today's reading, you learned about insertion sort. Write one to three sentences to answer each of the following questions.
- The reading claims that insertion sort is better for nearly-sorted lists than reverse-ordered lists. Why?
- How much extra memory is required for each sort?
- If the list is composed of four identical elements, how many elements change position when insertion sort is used? Why?
- Why might some people use insertion sort in real life?
Exercise 2: Manual Use of Insertion Sort
For each of the following lists, draw the result of each insertion of the insertion sorting routine. You do not need to show the result of each comparison, just the final insertion of the element.
- [ 5 | 4 | 1 ]
- [ 3 | 1 | 3 ]
- [ 2 | 5 | 4 | 0 ]
- [ 6 | 8 | 3 | 5 | 1 | 9 | 2 | 2 ]
Exercise 3: Identifying Insertion Sort
In this exercise, you will examine two sorting programs to determine if
either is insertion sort. Download and save the
programs insertion-sort-proc1.c
and insertion-sort-proc2.c
in your directory for this lab.
- Compile and run both programs. Do both sort the given list appropriately?
- Look at
insertion-sort-proc1.c. Is this an example of insertion sort?Hint: What exactly are the nested
forloops doing? - Look at
insertion-sort-proc2.c. Is this an example of insertion sort?Hint: What exactly is the
whileloop doing?
Exercise 4: Error Checking in Insertion Sort
Download and save the
program insertion-sort-proc3.c
in your directory for this lab.
- Compile and run the program with the values 1, 7, 3, 5, 4, 2, 9, 8, 2, 6. Does the program produce the correct output?
- Now run the program with a few of your own values. Does the program
still produce correct output?
Hint: try making some elements in the list negative.
- Read through the program to locate the source of the error and fix
it.
Hint: the error is caused by one line in the program.
- Write a paragraph explaining why this error caused the output you saw.
Exercise 5: Insertion Sort with Pictures
Download the
file insertion-sort-picture.c
and save it in your current directory. Read over the program and be sure
you understand it. Using what you have learned in the previous exercises,
write the insertion sort function that sorts the pixels in the picture,
compile, and view the result. The program may take a couple minutes to
run fully.
You will use this program in a future module, so you may wish to save this program.
Exercise 6: Insertion Sort with Column-Major Order
In Module 2, you learned about arrays. In this module, you learned about multidimensional arrays. Below is an example of initializing a two-dimensional array:
int array[2][5] = { {4, 3, 8, 2, 5}, {2, 1} };
In this example, the array of integers array has two rows,
with the first row initialized with the values 4, 3, 8, 2, and 5, and the
second row with the first two values initialized (2 and 1), and the
remaining values are implicitly initialized to 0. So, a human-readable
version of this two-dimensional array looks like the following:
However, when you initialize the array in C, the program reserves a contiguous amount of memory for the array and assigns the values that have been specified. So, the above array is represented in memory as the following:
As you notice, the C program puts the array in memory a row at a time, beginning from the first row. This is called row-major order, and is the C standard. Other programming languages, such as Fortran, use column-major order, in which each column is stored in memory contiguously. So, in column-major order, the array looks like the following:
When sorting a single-dimensional array in C, the most common method is to sort the elements from smallest to largest. Though sorting a multidimensional array is much less frequent, one method is to perform essentially the same method by sorting each row, so the rows are in order, but the columns are not.
- Write a program that, using insertion sort, sorts a two-dimensional array in row-column order such that the elements in each row go from smaller to larger.
- Now, write a program that takes a two-dimensional array and, using insertion sort, sorts it in column-major order, so the values in the top of each column are the smallest in the column, with the largest value in each column in the bottom.
Note that for this exercise, you should not perform a normal insertion sort (row-major order) and simply paste the result in the "column-major sorted" array.
Reminder: Complete Evaluation Form
When you have finished this lab, be sure to fill out its evaluation form in the "Lab Evaluation" section for CSC 161 on Pioneer Web.