Professional Documents
Culture Documents
contacts
FedEx packages
5
Sample sort client 2
6
Sample sort client 3
7
Total order
Goal. Sort any type of data (for which sorting is well defined).
No transitivity. Rock-paper-scissors.
COS 126
No totality. PU course prerequisites.
violates transitivity violates totality
8
Callbacks
Goal. Sort any type of data (for which sorting is well defined).
Q. How can sort() know how to compare data of type Double, String, and
java.io.File without any information about the type of an item's key?
9
Callbacks: roadmap
data-type implementation
client
public class String
implements Comparable<String>
public class StringSorter {
{ ...
public static void main(String[] args) public int compareTo(String b)
{ {
String[] a = StdIn.readAllStrings(); ...
Insertion.sort(a); return -1;
for (int i = 0; i < a.length; i++) ...
StdOut.println(a[i]); return +1;
} ...
} return 0;
}
}
v w
v w
w v
less than (return -1) equal to (return 0) greater than (return +1)
initial
14
Selection sort
Invariants.
in final order
15
Two useful sorting abstractions
Exchange. Swap item in array a[] at index i with the one at index j.
16
Selection sort inner loop
18
Selection sort: animations
20 random items
algorithm position
in final order
not in final order
http://www.sorting-algorithms.com/selection-sort
19
Selection sort: animations
20 partially-sorted items
algorithm position
in final order
not in final order
http://www.sorting-algorithms.com/selection-sort
20
Selection sort: mathematical analysis
a[]
entries in black
i min 0 1 2 3 4 5 6 7 8 9 10 are examined to find
the minimum
S O R T E X A M P L E
0 6 S O R T E X A M P L E
entries in red
1 4 A O R T E X S M P L E are a[min]
2 10 A E R T O X S M P L E
3 9 A E E T O X S M P L R
4 7 A E E L O X S M P T R
5 7 A E E L M X S O P T R
6 8 A E E L M O S X P T R
7 10 A E E L M O P X S T R
8 8 A E E L M O P R S T X
entries in gray are
9 9 A E E L M O P R S T X in final position
10 10 A E E L M O P R S T X
A E E L M O P R S T X
23
Insertion sort
Invariants.
24
Insertion sort inner loop
in order not yet seen
25
Insertion sort: Java implementation
26
Insertion sort: animation
40 random items
algorithm position
in order
not yet seen
http://www.sorting-algorithms.com/insertion-sort
27
Insertion sort: animation
40 reverse-sorted items
algorithm position
in order
not yet seen
http://www.sorting-algorithms.com/insertion-sort
28
Insertion sort: animation
40 partially-sorted items
algorithm position
in order
not yet seen
http://www.sorting-algorithms.com/insertion-sort
29
Insertion sort: mathematical analysis
a[]
i j 0 1 2 3 4 5 6 7 8 9 10
S O R T E X A M P L E entries in gray
do not move
1 0 O S R T E X A M P L E
2 1 O R S T E X A M P L E
3 3 O R S T E X A M P L E
4 0 E O R S T X A M P L E entry in red
is a[j]
5 5 E O R S T X A M P L E
6 0 A E O R S T X M P L E
7 2 A E M O R S T X P L E
entries in black
8 4 A E M O P R S T X L E moved one position
9 2 A E L M O P R S T X E right for insertion
10 2 A E E L M O P R S T X
A E E L M O P R S T X
30
Insertion sort: trace
31
Insertion sort: analysis
A E E L M O P R S T X
X T S R P O M L F E A
32
Insertion sort: partially-sorted arrays
A E E L M O T R X P S
33
Insertion sort: practical improvements
34
2.1 E LEMENTARY S ORTS
rules of the game
selection sort
insertion sort
Algorithms
shellsort
Idea. Move entries more than one position at a time by h-sorting the array.
h=4
L E E A M H L E P S O L T S X R
L M P T
E H S S
E L O X
A E L R
h = 13
P H E L L S O R T E X A M S L E
Shellsort. P 1959] h-sort array
[Shell for decreasing sequence
S of values of h.
H L
E E
input S H E LL L S O R T E X A M P L E
13-sort P H E L LL S O R T E X A M S L E
(8 additional files of size 1)
4-sort L E E A M H L E P S O L T S X R
An h-sorted file is h interleaved sorted files
1-sort A E E E H L L L M O P R S S T X
In iteration i, swap a[i] with each larger entry h positions to its left.
h-sorting
3-sorting an array
M O L E E X A S P R T
E O L M E X A S P R T
E E L M O X A S P R T
E E L M O X A S P R T
A E L E O X M S P R T
A E L E O X M S P R T
A E L E O P M S X R T
A E L E O P M S X R T
A E L E O P M S X R T
A E L E O P M S X R T
38
Shellsort example: increments 7, 3, 1
input 1-sort
S O R T E X A M P L E A E L E O P M S X R T
A E L E O P M S X R T
A E L E O P M S X R T
7-sort
A E E L O P M S X R T
S O R T E X A M P L E A E E L O P M S X R T
M O R T E X A S P L E A E E L O P M S X R T
M O R T E X A S P L E A E E L M O P S X R T
M O L T E X A S P R E A E E L M O P S X R T
M O L E E X A S P R T A E E L M O P S X R T
A E E L M O P R S X T
A E E L M O P R S T X
3-sort
M O L E E X A S P R T
E O L M E X A S P R T
result
E E L M O X A S P R T
E E L M O X A S P R T A E E L M O P R S T X
A E L E O X M S P R T
A E L E O X M S P R T
A E L E O P M S X R T
A E L E O P M S X R T
A E L E O P M S X R T
39
Shellsort: Java implementation
while (h >= 1)
{ // h-sort the array.
for (int i = h; i < N; i++) insertion sort
{
for (int j = i; j >= h && less(a[j], a[j-h]); j -= h)
exch(a, j, j-h);
}
move to next
h = h/3;
increment
}
}
input
40-sorted
13-sorted
4-sorted
result
41
Shellsort: animation
50 random items
algorithm position
h-sorted
current subsequence
http://www.sorting-algorithms.com/shell-sort other elements
42
Shellsort: animation
50 partially-sorted items
algorithm position
h-sorted
current subsequence
http://www.sorting-algorithms.com/shell-sort other elements
43
Shellsort: which increment sequence to use?
44
Shellsort: intuition
7-sort 3-sort
S O R T E X A M P L E M O L E E X A S P R T
M O R T E X A S P L E E O L M E X A S P R T
M O R T E X A S P L E E E L M O X A S P R T
M O L T E X A S P R E E E L M O X A S P R T
M O L E E X A S P R T A E L E O X M S P R T
A E L E O X M S P R T
A E L E O P M S X R T
A E L E O P M S X R T
A E L E O P M S X R T
A E L E O P M S X R T
still 7-sorted
R, bzip2, /linux/kernel/groups.c
Useful in practice.
Fast unless array size is huge (used for small subarrays).
Tiny, fixed footprint for code (used in some embedded systems).
Hardware sort prototype. uClibc
Average-case performance?
47
Elementary sorts summary
selection sort N2 N2 N2
insertion sort N N2 N2
all permutations
equally likely
50
How to shuffle an array
all permutations
equally likely
51
Shuffle sort
52
Shuffle sort
53
Shuffle sort
54
War story (Microsoft)
http://www.browserchoice.eu
appeared last
50% of the time
55
War story (Microsoft)
Microsoft's
public intimplementation in Javascript that)
compareTo(Browser
{
function
double r RandomSort
= Math.random();
(a,b)
{if (r < 0.5) return -1;
browser comparator
if return
(r > 0.5) (0.5return
- Math.random());
+1;
}return 0; (should implement a total order)
56
Knuth shuffle demo
57
Knuth shuffle
exch(a, i, r);
}
}
}
59
Broken Knuth shuffle
60
War story (online poker)
61
War story (online poker)
for i := 1 to 52 do begin
r := random(51) + 1; between 1 and 51
swap := card[r];
card[r] := card[i];
card[i] := swap;
end;
Bug 1. Random number r never 52 52nd card can't end up in 52nd place.
Bug 2. Shuffle not uniform (should be between 1 and i).
Bug 3. random() uses 32-bit seed 232 possible shuffles.
Bug 4. Seed = milliseconds since midnight 86.4 million shuffles.
The generation
Exploit. of random
After seeing numbers
5 cards andis synchronizing
too important to be left server
with to chance.
clock,
can determine
Robert R.allCoveyou
future cards in real time.
62
War story (online poker)