The first section introduces basic data structures and notation. The next section presents several sorting algorithms. This is followed by techniques for implementing dictionaries, structures that allow efficient search, insert, and delete operations. The last section illustrates algorithms that sort data and implement dictionaries for very large files. Source code for each algorithm, in ANSI C, is available at the site listed below | Sorting and Searching Algorithms: A Cookbook Thomas Niemann Preface This is a collection of algorithms for sorting and searching. Descriptions are brief and intuitive, with just enough theory thrown in to make you nervous. I assume you know C, and that you are familiar with concepts such as arrays and pointers. The first section introduces basic data structures and notation. The next section presents several sorting algorithms. This is followed by techniques for implementing dictionaries, structures that allow efficient search, insert, and delete operations. The last section illustrates algorithms that sort data and implement dictionaries for very large files. Source code for each algorithm, in ANSI C, is available at the site listed below. Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author. THOMAS NIEMANN Portland, Oregon email: thomasn@ home: By the same author: A Guide to Lex and Yacc, at . - 2 - CONTENTS 1. INTRODUCTION 4 2. SORTING 8 Insertion Sort 8 Shell Sort 10 Quicksort 11 Comparison 14 3. DICTIONARIES 15 Hash Tables 15 Binary Search Trees 19 Red-Black Trees 21 Skip Lists 25 Comparison 26 4. VERY LARGE FILES 29 External Sorting 29 B-Trees 32 5. BIBLIOGRAPHY 36 - 3 - 1. Introduction Arrays and linked lists are two basic data structures used to store information. We may wish to search, insert or delete records in a database based on a key value. This section examines the performance of these operations on arrays and linked lists. Arrays Figure 1-1 shows an array, seven elements long, containing numeric values. To search the array sequentially, we may use the algorithm in Figure 1-2. The maximum number of comparisons is