Title: Sorting
1Sorting
2Sorting
- Keeping data in order allows it to be searched
more efficiently - Example Phone Book
- Sorted by Last Name (lots of work to do this)
- Easy to look someone up if you know their last
name - Tedious (but straightforward) to find by First
name or Address - Important if data will be searched many times
- Two algorithms for sorting today
- Bubble Sort
- Merge Sort
- Searching next lecture
3Bubble Sort (Sink sort here)
If A(1)gtA(2) switch If A(2)gtA(3) switch If
A(3)gtA(4) switch If A(4)gtA(5) switch If
A(N-3)gtA(N-2) switch
- If A(1)gtA(2)
- switch
- If A(2)gtA(3)
- switch
- If A(3)gtA(4)
- switch
- If A(4)gtA(5)
- switch
-
- If A(N-3)gtA(N-2)
- switch
- If A(N-2)gtA(N-1)
- switch
- If A(N-1)gtA(N)
- switch
If A(1)gtA(2) switch
If A(1)gtA(2) switch If A(2)gtA(3) switch If
A(3)gtA(4) switch If A(4)gtA(5) switch If
A(N-3)gtA(N-2) switch If A(N-2)gtA(N-1) switch
A(1) is now Nth largest entry. A(2) is still
(N-1)th largest entry. A(3) is still (N-2)th
largest entry. A(N-3) is still 4th largest
entry A(N-2) is still 3rd largest entry A(N-1) is
still 2nd largest entry A(N) is still largest
entry
A(N-2) is now 3rd largest entry A(N-1) is still
2nd largest entry A(N) is still largest enry
A(N-1) is now 2nd largest entry A(N) is still
largest enry
A(N) is now largest entry
4Bubble Sort (Sink sort here)
If A(1)gtA(2) switch If A(2)gtA(3) switch If
A(3)gtA(4) switch If A(4)gtA(5) switch If
A(N-3)gtA(N-2) switch
- If A(1)gtA(2)
- switch
- If A(2)gtA(3)
- switch
- If A(3)gtA(4)
- switch
- If A(4)gtA(5)
- switch
-
- If A(N-3)gtA(N-2)
- switch
- If A(N-2)gtA(N-1)
- switch
- If A(N-1)gtA(N)
- switch
If A(1)gtA(2) switch If A(2)gtA(3) switch If
A(3)gtA(4) switch If A(4)gtA(5) switch If
A(N-3)gtA(N-2) switch If A(N-2)gtA(N-1) switch
If A(1)gtA(2) switch
1 step
N-3 steps
N-2 steps
N-1 steps
5Bubble Sort (Sink sort here)
If A(1)gtA(2) switch If A(2)gtA(3) switch If
A(3)gtA(4) switch If A(4)gtA(5) switch If
A(N-3)gtA(N-2) switch
- If A(1)gtA(2)
- switch
- If A(2)gtA(3)
- switch
- If A(3)gtA(4)
- switch
- If A(4)gtA(5)
- switch
-
- If A(N-3)gtA(N-2)
- switch
- If A(N-2)gtA(N-1)
- switch
- If A(N-1)gtA(N)
- switch
If A(1)gtA(2) switch If A(2)gtA(3) switch If
A(3)gtA(4) switch If A(4)gtA(5) switch If
A(N-3)gtA(N-2) switch If A(N-2)gtA(N-1) switch
If A(1)gtA(2) switch
for lastcompareN-1-11 for i1lastcompare
if A(i)gtA(i1)
6Matlab code for Bubble Sort
- function S bubblesort(A)
- Assume A row/column Copy A to S
- S A
- N length(S)
- for lastcompareN-1-11
- for i1lastcompare
- if S(i)gtS(i1)
- tmp S(i)
- S(i) S(i1)
- S(i1) tmp
- end
- end
- end
What about returning an Index vector Idx, with
the property that S A(Idx)?
7Matlab code for Bubble Sort
- function S,Idx bubblesort(A)
- Assume A row/column Copy A to S
- N length(A)
- S A Idx 1N A(Idx) equals S
- for lastcompareN-1-11
- for i1lastcompare
- if S(i)gtS(i1)
- tmp S(i) tmpi Idx(i)
- S(i) S(i1) Idx(i) Idx(i1)
- S(i1) tmp Idx(i1) tmpi
- end
- end
- end
If we switch two entries of S, then exchange the
same two entries of Idx. This keeps A(Idx)
equaling S
8Merging two already sorted arrays
- Suppose A and B are two sorted arrays (different
lengths) - How do you merge these into a sorted array C?
- Chalkboard
9Pseudo-code Merging two already sorted arrays
- function C merge(A,B)
- nA length(A) nB length(B)
- iA 1 iB 1 smallest unused element
- C zeros(1,nAnB)
- for iC1nAnB
- if A(iA)ltB(iB) compare smallest unused
- C(iC) A(iA) iA iA1 use A
- else
- C(iC) B(iB) iB iB1 use B
- end
- end
10MergeSort
- function S mergeSort(A)
- n length(A)
- if n1
- S A
- else
- hn floor(n/2)
- S1 mergeSort(A(1hn))
- S2 mergeSort(A(hn1end))
- S merge(S1,S2)
- end
Base Case
Split in half
Sort 1st half
Sort 2nd half
Merge 2 sorted arrays
11Rough Operation Count for MergeSort
- Let R(n) denote the number of operations
necessary to sort (using mergeSort) an array of
length n. - function S mergeSort(A)
- n length(A)
- if n1
- S A
- else
- hn floor(n/2)
- S1 mergeSort(A(1hn))
- S2 mergeSort(A(hn1end))
- S merge(S1,S2)
- end
R(1) 0
R(n/2) to sort array of length n/2
R(n/2) to sort array of length n/2
n steps to merge two sorted arrays of total
length n
Recursive relation R(1)0, R(n) 2R(n/2) n
12Rough Operation Count for MergeSort
- The recursive relation for R
- R(1)0, R(n) 2R(n/2) n
- Claim For n2m, it is true that R(n) n log2(n)
- Case (m0) true, since log2(1)0
- Case (mk1 from mk)
Recursive relation
Induction hypothesis
13Matlab command sort
- Syntax is
- S sort(A)
- If A is a vector, then S is a vector in ascending
order - The indices which rearrange A into S are also
available. - S,Idx sort(A)
- S is the sorted values of A, and A(Idx) equals S.