220 likes | 332 Views
Algorithm Design and Analysis (ADA). 242-535 , Semester 1 2013-2014. Objective asymptotic analysis of insertion sort. 3. Insertion Sort. Overview. 1. What is Sorting? 2. Insertion Sort. 1. What is Sorting?. Input : sequence < a 1, a 2, …, an> of numbers.
E N D
Algorithm Design and Analysis (ADA) 242-535, Semester 1 2013-2014 • Objective • asymptotic analysis of insertion sort 3. Insertion Sort
Overview 1. What is Sorting? 2. Insertion Sort
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:8 2 4 9 3 6 Output:2 3 4 6 8 9
Sorting is Essential • 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. • . . . obvious applications problems become easy once items are in sorted order non-obvious applications
Different Sorting Needs • Applications have different sorting needs: • 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?
Many Different Sorting Algorithms • Internal sorts • Insertion sort, selection sort, bubblesort, shaker sort • Quicksort, mergesort, heapsort, samplesort, shellsort • Solitaire sort, red-black sort, splaysort, , ... • External sorts • Poly-phase mergesort, cascade-merge, oscillating sort • String/radix sorts • Distribution, MSD, LSD, 3-way string quicksort • Parallel sorts • Bitonic sort, Batcher even-odd sort • Smooth sort, cube sort, column sort • GPUsort
2. Insertion Sort INSERTION-SORT (A, n) ⊳ A[1 . . n] forj ← 2ton dokey ← A[ j] i ← j – 1 while i > 0 and A[i] > key doA[i+1] ← A[i] i ← i – 1 A[i+1] = key “pseudocode” 1 i j n A: key sorted
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; • while((i >= 0) && (A[i] < key)) { • A[i+1] = A[i]; (6) i--; (7) } (8) A[i+1] = key; (9) } }
Insertion Sort Structure Tree for1-9 block1-9 while4-7 2 3 8 block4-7 5 6
this is the hard part – assume the worse case wherethe loop has to move the most elements) • 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: = 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
Analyzing Insertion Sort • What can T() be? • Best case -- inner loop body never executed • T(n) is a linear function • Worst case -- inner loop body executed for all previous elements • T(n2) is a quadratic function • Average case • tricky