Functional Problem Solving (CSC 151 2014S) : EBoards

CSC151.02 2014S, Class 47: Introduction to Sorting


Overview

Preliminaries

Admin

Upcoming Work

Extra Credit

Questions

The problem of sorting

Writing sorting algorithms

Strategy one:[Quicksort]

Strategy two: [Selection sort]

Strategy three: [Bubble sort]

Strategy four: [Insertion sort]

All are correct.

Quicksort is much faster than the other three. Quicksort is also really easy to get wrong.

Examples: Insertion, selection, etc

Formalizing the problem

Suppose we had to write the documentation for a sorting procedure for lists

;;; Procedure: ;;; sorter ;;; Parameters: ;;; ah, a potentially empty list ;;; get-key, a unary procedure which extracts the key used for sorting ;;; may-precede?, a predicate which determines whether one key ;;; should come before another ;;; Purpose: ;;; Rearrange the elements of the list in a particular order ;;; Produces: ;;; sortah, a list ;;; Preconditions: ;;; may-precede? must be applicable to any two keys ;;; may-precede? is a complete order - transitive ;;; all the elements of ah should be the same type ;;; get-key must be applicable to all elements of ah ;;; Postconditions: ;;; sortah is ordered by get-key/may-precede ;;; For all reasonable i, ;;; (may-precede? (get-key (list-ref sortah i)) ;;; (get-key (list-ref sortah (+ i 1))) ;;; sortah is a permutation of ah

;;; Procedure: ;;; vector-sorter ;;; Parameters: ;;; um, a vector ;;; Purpose: ;;; Produces: ;;; Preconditions: ;;; Postconditions:


Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-2014 Janet Davis, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials are copyright by John David Stone or Henry Walker and are used with permission.)

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.