IAT 265 Binary Search Sorting June 23, 2015 IAT 265 1 Search Frequently wish to organize data to support search – Eg. Search for single item – Eg. Search for all items between 3 and 7 June 23, 2015 IAT 265 2 Search Often want to search for an item in a list In an unsorted list, must search linearly 12 In 5 31 62 9 4 26 15 15 26 31 62 a sorted list… 4 June 23, 2015 5 9 12 IAT 265 3 Binary Search Start 4 with index pointer at start and end 5 Compute 4 June 23, 2015 5 9 12 15 26 31 62 index between two end pointers 9 12 15 26 IAT 265 31 62 4 Binary Search Compare 4 If 5 middle item to search item 9 12 15 26 31 62 search < mid: move end to mid -1 4 June 23, 2015 5 9 12 15 26 IAT 265 31 62 5 Binary Search int[] Arr = new int[8] ; <populate array> int search = 4 ; int start = 0, end = Arr.length, mid ; mid = (start + end)/2 ; while( start <=end ) { if(search == Arr[mid] ) SUCCESS ; if( search < Arr[mid] ) end = mid – 1 ; else start = mid + 1 ; mid = (start + end)/2 ; } June 23, 2015 IAT 265 6 Binary Search Run Time – O( log(N) ) – Every iteration chops list in half June 23, 2015 IAT 265 7 Sorting Need a sorted list to do binary search Numerous sort algorithms June 23, 2015 IAT 265 8 The family of sorting methods Main sorting themes Address-based sorting Comparison-based sorting Proxmap Sort Transposition sorting RadixSort BubbleSort Insert and keep sorted Insertion sort June 23, 2015 Tree sort Priority queue sorting Selection sort Heap sort IAT 265 Divide and conquer QuickSort MergeSort Diminishing increment sorting ShellSort 9 Bubble sort Not [transposition sorting] a fast sort! end of one inner loop Code is small: for (int i=arr.length; i>0; i--) { for (int j=1; j<i; j++) { if (arr[j-1] > arr[j]) { temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } } 5 ‘bubbled’ to the correct position remaining elements put in place June 23, 2015 IAT 265 5 3 2 4 3 5 2 4 3 2 5 4 3 2 4 5 2 3 4 5 10 Divide and conquer sorting MergeSort June 23, 2015 QuickSort IAT 265 11 QuickSort [divide and conquer sorting] As its name implies, QuickSort is the fastest known sorting algorithm in practice Its average running time is O(n log n) The idea is as follows: 1. If the number of elements to be sorted is 0 or 1, then return 2. Pick any element, v (this is called the pivot) 3. Partition the other elements into two disjoint sets, S1 of elements v, and S2 of elements > v 4. Return QuickSort (S1) followed by v followed by QuickSort (S2) June 23, 2015 IAT 265 12 QuickSort example 5 1 4 2 10 3 9 15 12 Pick the middle element as the pivot, i.e., 10 Partition into the two subsets below 5 1 4 2 3 9 4 5 9 15 12 Sort the subsets 1 2 3 12 15 Recombine with the pivot 1 June 23, 2015 2 3 4 5 9 IAT 265 10 12 15 13 Partitioning example 5 11 4 25 10 3 9 15 12 Pick the middle element as the pivot, i.e., 10 Move the pivot out of the way by swapping it with the first element 10 11 4 25 5 3 9 15 12 swapPos Step along the array, swapping small elements into swapPos 10 4 11 25 5 3 9 15 12 swapPos June 23, 2015 IAT 265 14 10 4 11 25 5 3 9 15 12 3 9 15 12 25 9 15 12 swapPos 10 4 5 25 11 swapPos 10 4 5 3 11 swapPos 10 4 5 3 9 25 11 15 12 swapPos 9 4 5 3 10 25 11 15 12 swapPos-1 June 23, 2015 IAT 265 15 Pseudocode for Quicksort procedure quicksort(array, left, right) if right > left select a pivot index (e.g. pivotIdx = left) pivotIdxNew = partition(array, left, right, pivotIdx) quicksort(array, left, pivotIdxNew - 1) quicksort(array, pivotIdxNew + 1, right) June 23, 2015 IAT 265 16 Pseudo code for partitioning pivotIdx = middle of array a; swap a[pivotIdx] with a[first]; // Move the pivot out of the way swapPos = first + 1; for( i = swapPos +1; i <= last ; i++ ) if (a[i] < a[first]) { swap a[swapPos] with a[i]; swapPos++ ; } // Now move the pivot back to its rightful place swap a[first] with a[swapPos-1]; return swapPos-1; // Pivot position June 23, 2015 IAT 265 17 Java Sort and binary search provided on Arrays – sort() ints, floats – sort( Object[] a, Comparator c ) • you supply the Comparator object, which Contains a function to compare 2 objects – binarySearch() • ints, floats…. • Search Objects with Comparator object June 23, 2015 IAT 265 18