The purpose of this lab is to gain familiarity with the method of data sorting known as insertion sort. To illustrate this approach, the insertion sort algorithm is applied both to numbers and to pixels within an image.
Today's reading discusses the insertion sort algorithm for ordering data within an array. Write one to three sentences to answer each of the following questions.
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.
Although the description of the insertion sort in the reading considered the ordering of integers, the algorithm applies to any data which can be ordered.
This problem considers applying the insertion sort to the pixels in a picture.
Program insertion-sort-picture.c provides a shell for applying an insertion sort to an array of pixels.
Read over the program and be sure you understand it.
Compile and run the program, and describe what happens.
Using the the insertion sort in the reading as starting point, complete the pixelInsertionSort procedure to sort the pixels in the local, 1-dimensional array picArray
Be sure to compile and run the program to be sure it works.
insertion-sort-picture.c has the following high-level outline.
Assuming the previous step was successful, you observed an original picture and a final picture after the pixels had been sorted.
In Module 010, you learned about arrays. In this module, you learned about multi-dimensional arrays. Below is an example of initializing a two-dimensional array:
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. Some 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 multi-dimensional 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-major order such that the elements in each row go from smaller to larger.
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.
|
created 1 August 2011 by April O'Neill last revised 8 August 2011 by April O'Neill minor editing 7 November 2011 by Henry M. Walker reformatting lab, editing programs 2 February 2014 by Henry M. Walker readings added 19 September 2014 by Henry M. Walker discussion of 2D arrays rethought November/December 2014 by Anita DeWitt minor editing (mostly formatting) 25 December 2014 by Henry M. Walker new insertion-sort-picture.c January 2015 by Henry M. Walker reformatted and updated for varying Picture sizes 19 October 2016 by Henry M. Walker typos correct 26 November 2014 by Henry M. Walker |
|
| For more information, please contact Henry M. Walker at walker@cs.grinnell.edu. |