View
218
Download
0
Category
Preview:
DESCRIPTION
Trace [9, 3, 8, 12, 1, 5, 22, 18, 14, 2] [9] [3, 9] [3, 8, 9] [3, 8, 9, 12] [1, 3, 8, 9, 12] … [1, 2, 3, 5, 8, 9, 12, 14, 18, 22]
Citation preview
Algorithm Analysis
Lakshmish Ramaswamy
Insertion Sort• Conceptual Logic• Create a duplicate array• Insert elements from original array into
duplicate array (ith element in iteration i)• Maintain sortedness of duplicate array at
all times– May need to move existing elements to
accommodate the incoming element
Trace[9, 3, 8, 12, 1, 5, 22, 18, 14, 2][9][3, 9][3, 8, 9][3, 8, 9, 12][1, 3, 8, 9, 12]…[1, 2, 3, 5, 8, 9, 12, 14, 18, 22]
Insertion Sort Algorithmpublic static void InsertionSort(int[] Arr){int i, j, k, currElement;if(Arr.length == 1) return;for (i = 1; i < (Arr.length); i++){
currElement = Arr[i]; for(j = 0; j < i && Arr[j] <= currElement; j++); for(k = (i-1); k => j; k++)
Arr[k+1] = Arr[k]; Arr[j] = currElement;}return;}
Trace[9, 3, 8, 12, 1, 5, 22, 18, 14, 2]
Trace[9, 3, 8, 12, 1, 5, 22, 18, 14, 2][9, 3, 8, 12, 1, 5, 22, 18, 14, 2][3, 9, 8, 12, 1, 5, 22, 18, 14, 2][3, 8, 9, 12, 1, 5, 22, 18, 14, 2][3, 8, 9, 12, 1, 5, 22, 18, 14, 2][1, 3, 8, 9, 12, 5, 22, 18, 14, 2][1, 3, 5, 8, 9, 12, 22, 18, 14, 2][1, 3, 5, 8, 9, 12, 22, 18, 14, 2][1, 3, 5, 8, 9, 12, 18, 22, 14, 2][1, 3, 5, 8, 9, 12, 14, 18, 22, 2][1, 2, 3, 5, 8, 9, 12, 14, 18, 22]
Analysis• Constant cost for comparison and
assignment– Assume equal cost ‘c’ for simplicity
• For ith iteration– ‘t’ comparisons for some t <= (i-1)– i-t+1 assignments– Cost = c(i+1)
• Total cost = c(2 + 3 + ….+ N) = c/2*(N2-N-2)
• O(N2) algorithm
Bubble Sort
• Imitates bubbles raising through water• Compares two neighboring elements
– Swap if they are in the wrong order• Repeat the procedure (N-1) times
Bubble Sort Algorithmpublic static void BubbleSort(int[] Arr){int i, j;for(i = 0; i < (Arr.length-1); i++){for(j = (Arr.length-1); j > i; j--){if(Arr[j] < Arr[j-1])
swap(Arr[j], Arr[j-1]);}
}}
Trace[9, 3, 8, 12, 1, 5, 22, 18, 14, 2]
Analysis
• Constant time for comparison and swap• Outer loop is executed (N-1) times• For a particular i the inner loop is executed
N-i-1 times• # comparisons = (N-1) + (N-2) + … + 2
– N(N-1)/2 – 1• O(N2) algorithm
Merge
• Problem – Merge two sorted arrays such that the resultant array remains sorted
• Logic– Keep pointers to both arrays– Compare the current pointer elements of two
arrays– Place the one that is lowest and increment its
pointer
Merge Algorithmpublic static int[] Merge(int[] A1, int[] A2){int[] A3 = new int[A1.length+ A2.length];int i, j;while(i < A1.length && j < A2.length){if(i => A1.length){A3[i+j] = A2[j]; j++; }elseif (j => A2.length){A3[i+j] = A1[i]; i++; }elseif(A1[i] < A2[j]){A3[i+j] = A1[i]; i++; }else{A3[i+j] = A2[j]; j++; }}return(A3);}
Trace[1,3, 8, 9, 12] [2, 5, 14, 18, 22]
Merge Sort
• Recursive algorithm• Partition array at the center• Call merge sort on each part of the array• Call merge to combine the two parts
Trace
[9, 3, 8, 12, 1, 5, 22, 18]
Recommended