123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*
- Module: Sort Linked Lists
- Author: [email protected] (Dick Grune @ Vrije Universiteit, Amsterdam)
- Version: Tue Sep 17 17:32:33 1991
- Description:
- This is the implementation part of a generic routine that sorts
- linked lists.
- Instantiation:
- See sortlist.spc
- */
- #ifndef _SORT_EXTERN_DEFINED
- static
- #endif
- void
- SORT_NAME(struct SORT_STRUCT **lh) {
- /* I've never known that sorting a linked list was this
- complicated; what am I missing?
- */
- register struct SORT_STRUCT **listhook = lh;
- while (*listhook) {
- /* 0. the list is not empty -> there must be a smallest one */
- register struct SORT_STRUCT **hsmall;
- /* 1. find (the pointer to) the smallest element */
- {
- register struct SORT_STRUCT **hook = listhook;
- /* assume initially that first element is smallest */
- hsmall = hook;
- while (*hook) {
- if (SORT_BEFORE(*hook, *hsmall)) {
- /* revise opinion */
- hsmall = hook;
- }
- hook = &(*hook)->SORT_NEXT;
- }
- }
- /* 2. move the smallest element to front */
- {
- register struct SORT_STRUCT *smallest = *hsmall;
- /* remove it from the chain */
- *hsmall = smallest->SORT_NEXT;
- /* and insert it before the first element */
- smallest->SORT_NEXT = *listhook;
- *listhook = smallest;
- }
- /* 3. skip over smallest element */
- listhook = &(*listhook)->SORT_NEXT;
- }
- }
|