200 likes | 449 Views
CS 253: Algorithms. Chapter 2 Sorting Insertion sort Bubble Sort Selection sort Run-Time Analysis. Credit : Dr. George Bebis. The Sorting Problem. Input: A sequence of n numbers a 1 , a 2 , . . . , a n Output:
E N D
CS 253: Algorithms Chapter 2 Sorting Insertion sort Bubble Sort Selection sort Run-Time Analysis Credit: Dr. George Bebis
The Sorting Problem • Input: A sequence of nnumbers a1, a2, . . . , an • Output: A permutation (reordering) a1’, a2’, . . . , an’ of the input sequence such that a1’ ≤ a2’ ≤ · · · ≤ an’ • Internal Sort- The data to be sorted is all stored in RAM. • External Sort - Data to be sorted does not fit in the RAM and therefore stored in an external storage device (e.g. HardDisk)
24 10 6 Insertion Sort Similar to sorting a hand of playing cards 36 To insert 12, we need to make room for it by moving first 36 and then 24. 12
24 10 6 Insertion Sort 36 12
24 36 Insertion Sort 10 6 12
Insertion Sort input array 5 2 4 6 1 3 at each iteration, the array is divided in two sub-arrays: left sub-array right sub-array unsorted sorted
1 2 3 4 5 6 7 8 a1 a2 a3 a4 a5 a6 a7 a8 key Alg.:INSERTION-SORT(A) for j ← 2to n do key ← A[ j ] % Insert A[ j ] into the sorted sequence A[1 . . j -1] i ← j - 1 while i > 0 and A[i] > key do A[i + 1] ← A[i] i ← i – 1 A[i + 1] ← key • Insertion sort – sorts the elements in place
times n n-1 n-1 n-1 n-1 Operation count for Insertion Sort cost c1 c2 0 c4 c5 c6 c7 c8 INSERTION-SORT(A) for j ← 2to n do key ← A[ j ] % Insert A[ j ] into the sorted …. i ← j - 1 while i > 0 and A[i] > key do A[i + 1] ← A[i] i ← i – 1 A[i + 1] ← key tj: # of times the while statement is executed at iteration j
Best Case Analysis • The array is already sorted A[i] ≤ key upon the first time the while loop test is run then (tj= 1) and
Worst Case Analysis • The array is sorted in reverse order • Always A[i] > keyin while loop test • Have to compare keywith all elements to the left of the jth position compare withj-1 elements tj = j
8 4 6 9 2 3 1 Bubble Sort • Swaps adjacent elements that are out of order • Repeatedly pass through the array • Simpler, but slower than Insertion sort i 1 2 3 n j
1 1 8 8 8 1 1 8 1 8 8 1 1 2 2 4 2 4 2 2 1 8 4 4 8 4 6 6 4 6 8 4 1 3 4 6 3 3 3 9 9 1 6 9 6 6 4 4 4 6 8 4 6 9 6 9 2 2 6 8 4 9 9 1 9 2 2 2 2 2 9 1 3 8 6 2 6 8 3 1 3 3 9 3 9 3 9 3 9 3 3 i = 1 j i = 2 j i = 1 j i = 3 j i = 1 j i = 4 j i = 1 j i = 5 j i = 1 j i = 6 j i = 1 i = 1 j j i = 7 j Bubble Sort Example
8 4 6 9 2 3 1 i = 1 j Bubble Sort Alg.:BUBBLESORT(A) fori 1tolength[A] do forj length[A]downtoi + 1 do ifA[j] < A[j -1] then exchange A[j] A[j-1] i
Bubble-Sort Running Time Alg.: BUBBLESORT(A) fori 1tolength[A] do forj length[A]downtoi + 1 do ifA[j] < A[j -1] then exchange A[j] A[j-1] c1 c2 Comparisons and Exchanges: n2/2 c3
1 1 1 1 1 8 1 1 4 2 2 4 2 2 2 2 3 3 3 6 6 3 6 3 9 9 4 9 4 4 9 4 4 2 6 6 6 2 4 9 3 3 9 6 8 3 8 6 8 9 1 9 8 8 8 8 Selection Sort • Find the smallest element in the array and exchange it with the element in the first position • Find the second smallest element and exchange it with the element in the second position • Continue until the array is sorted Example
n2/2 comparisons • n exchanges Analysis of Selection Sort costtimes c1 1 c2 n c3 n-1 c4 c5 c6 n-1 Alg.:SELECTION-SORT(A) n ← length[A] for j ← 1to n - 1 do smallest ← j for i ← j + 1to n do if A[i] < A[smallest] then smallest ← i exchange A[j] ↔ A[smallest]