Why Sort? • Put matching elements together – – Uniqueness testing Deleting duplicates Frequency Counting Set operations • Prioritize Elements • Reconstruct original order • Efficient searching (binary search, pairs)
Sorting Algorithms (pp. 80 -82) • Insertion Sort – Least code, least data movement (inversions) • Selection Sort – Conceptually simple, fewest swaps • Quick Sort – Fastest – Needs careful implementation – Partition algorithm useful on its own
Comparison Functions • Use with generalized sorting algorithms • Stable Sort – Sort criteria separately (most important last) • Unstable Sort – Previously sorted not necessarily still in order – One comparison function handles all criteria
Sorting in C++ (STL) • Library functions sort and stable_sort – Iterator bg (beginning of list) – Iterator end (end of list) – Optional Binary. Predicate (default <=) • Function that takes two items and returns true if they are in order
Sorting in Java • In java. util. Arrays – Array of Objects (Object[] a) – Optional Comparator (default <=)
Search • Sequential Search • Binary Search – Tricky to get right under pressure • Consider stopping condition – Library functions • C++ STL: bsearch • Java: binary. Search • (see pp. 84 -85)
Generalizing Search • Sequential – Foreach element • If ( correct(element) ) process and break • Binary – While (remaining list not empty) • If (too-high (middle-of-list)) – Cut off bottom half • Else if (too-low (middle-of-list)) – Cut off top half • Else process and break
Notes on Binary Search • Generalized functions “too-high” and “too-low” might evaluate criteria other than a value – E. g. outcome of function with a given parameter • If you can estimate a location better than the middle, use it! (phone book search)