Sorting by merging

Course links

Exercise 1

Use a merging procedure constructed by merge to combine the lists (2 3 4 7 8 10 12) and (1 6 11 13 14).

Exercise 2

What happens if a merging procedure constructed by merge is applied to lists that are not already in order?

Exercise 3

What happens if a merging procedure constructed by merge is given two empty lists as arguments? Why?

Exercise 4

What is the value of the procedure call (split '(a b c d e f g))? Figure it out by hand first, then use DrScheme to check your answer. Account for any differences between DrScheme's answer and yours.

Exercise 5

Using merge-sort, sort the strings "blanc", "noir", "rouge", "bleu", "jaune", "vert", "gris", "brun", and "rose" into alphabetical order.

Exercise 6

Develop a Scheme procedure that takes a vector of real numbers and determines whether its elements are arranged in ascending numerical order, returning #t if it is and #f if it is not.

Exercise 7

Sometimes, instead of sorting the elements of a list, we want to sort the entries in an association list so that the keys are arranged in a particular order (without regard to the corresponding values). Let's call a procedure that takes an association list as its argument and returns another association list with the same entries, but arranged so that the keys are in a particular order, an alist-sorter.

Develop a Scheme procedure alist-sort that takes, as its only argument, a binary predicate may-precede? expressing an ordering relation, and returns an alist-sorter that arranges the entries of any given association list so that their keys are ordered by may-precede?.