Algorithm Design and Analysis (ADA) 242-535, Semester 1 2014-2015 3. Insertion Sort • Objective o asymptotic analysis of insertion sort 242-535 ADA: 3. Insertion Sort 1 Overview 1. What is Sorting? 2. Insertion Sort 242-535 ADA: 3. Insertion Sort 2 1. What is Sorting? Input: sequence <a1, a2, …, an> of numbers. Output: permutation <a'1, a'2, …, a'n> such that a'1 ≤ a'2 ≤ … ≤ a'n Example: Input: Output: 242-535 ADA: 3. Insertion Sort 8 2 4 9 3 6 2 3 4 6 8 9 3 Sorting is Essential o o o o o o o o o o o o o o o Sort a list of names. Organize an MP3 library. Display Google PageRank results. List RSS feed in reverse chronological order. Find the median. Find the closest pair. Binary search in a database. Identify statistical outliers. Find duplicates in a mailing list. Data compression. Computer graphics. Computational biology. Supply chain management. Load balancing on a parallel computer. ... 242-535 ADA: 3. Insertion Sort obvious applications problems become easy once items are in sorted order non-obvious applications 4 Different Sorting Needs • Applications have different sorting needs: o o o o o o o o o Stable? Parallel? Deterministic? Keys all distinct? Multiple key types? Linked list or arrays? Large or small items? Is your array randomly ordered? Need guaranteed performance? 242-535 ADA: 3. Insertion Sort 5 Many Different Sorting Algorithms • Internal sorts o Insertion sort, selection sort, bubblesort, shaker sort o Quicksort, mergesort, heapsort, samplesort, shellsort o Solitaire sort, red-black sort, splaysort, , ... • External sorts o Poly-phase mergesort, cascade-merge, oscillating sort • String/radix sorts o Distribution, MSD, LSD, 3-way string quicksort • Parallel sorts o Bitonic sort, Batcher even-odd sort o Smooth sort, cube sort, column sort o GPUsort 242-535 ADA: 3. Insertion Sort 6 2. Insertion Sort INSERTION-SORT (A, n) ⊳ A[1 . . n] for j ← 2 to n do key ← A[ j] i←j–1 while i > 0 and A[i] > key do A[i+1] ← A[i] i←i–1 A[i+1] = key “pseudocode” 1 i j A: sorted key n Example of Insertion Sort 8 2 4 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 Example of Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 2 3 4 6 8 9 done Insertion Sort Java Code void insertionSort(int[] A) // A[0 .. n-1] { (1) for (int j = 1; j < num.length; j++) { // start with 1 (not 2) (2) int key = num[j]; (3) int i = j - 1; (4) while((i >= 0) && (A[i] < key)) { (5) A[i+1] = A[i]; (6) i--; (7) } (8) A[i+1] = key; (9) } } 242-535 ADA: 3. Insertion Sort 19 Insertion Sort Structure Tree for 1-9 block 1-9 2 while 4-7 3 8 block 4-7 5 242-535 ADA: 3. Insertion Sort 6 20 • Lines 2, 3, 5, 6, 8: each is O(1) • Block of 4-7 = O(1) + O(1) = O(1) • For of 4-7 is: this is the hard part – assume the worse case where the loop has to move the most elements) = O( (n-1) * 1) = O(n-1) = O(n), simplified • Block of 1-9 = O(1) + O(1) + O(n) + O(1) = O(n) • For of 1-8 is: = O( (n-1) * n) = O(n2 - n) = O(n2), simplified 242-535 ADA: 3. Insertion Sort 21 Analyzing Insertion Sort • What can T() be? o Best case -- inner loop body never executed • T(n) is a linear function o Worst case -- inner loop body executed for all previous elements • T(n2) is a quadratic function o Average case • tricky 242-535 ADA: 3. Insertion Sort 22