## Module (chicken sort)

This module contains several procedures which deal with sorting of sequences (i.e., lists and vectors).

### merge

merge LIST1 LIST2 LESS?procedure
merge! LIST1 LIST2 LESS?procedure

  Joins two lists in sorted order. `merge!` is the destructive version of merge. `LESS?` should be a procedure of two arguments, that returns true if the first argument is to be ordered before the second argument.

### sort

sort SEQUENCE LESS?procedure
sort! SEQUENCE LESS?procedure

  Sort SEQUENCE, which should be a list or a vector. `sort!` is the destructive version of sort.

### sorted?

sorted? SEQUENCE LESS?procedure

  Returns true if the list or vector SEQUENCE is already sorted.

### topological-sort

topological-sort DAG PREDprocedure

  Sorts the directed acyclic graph dag DAG so that for every edge from vertex u to v, u will come before v in the resulting list of vertices.

  DAG is a list of sublists. The car of each sublist is a vertex. The cdr is the adjacency list of that vertex, i.e. a list of all vertices to which there exists an edge from the car vertex. `pred` is procedure of two arguments that should compare vertices for equality.

  Time complexity: O (|V| + |E|)

      (topological-sort
             '((shirt tie belt)
               (tie jacket)
               (belt jacket)
               (watch)
               (pants shoes belt)
               (undershorts pants shoes)
               (socks shoes))
             eq?)

      =>

      (socks undershorts pants shoes watch shirt belt tie jacket)

  If a cycle is detected during the sorting process, an exception of the condition kinds `(exn runtime cycle)` is thrown.

Previous: Module (chicken repl)

Next: Module (chicken string)