Announcement
Feel free to use LLMs (ChatGPT, etc) however you want on phase 2.
My OH are as normal today 2 - 3 in 779 Soda.
Radix Sorts
2
Lecture 35
CS61B, Spring 2023 @ UC Berkeley
Josh Hug and Justin Yokota
Today’s Two New Ideas
Today we’ll cover two new ideas:
Warmup: Digit-by-digit Sorting
Lecture 35, CS61B, Spring 2023
Warmup: Digit-by-digit Sorting
Counting Sort
Radix Sorts
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
22 |
3️4️ |
4️1 |
13️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
… |
|
|
|
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
What are the 4 integers at the end of the array?
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
… |
|
|
|
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
53 |
23 |
34 |
34 |
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
53 |
23 |
34 |
34 |
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
I put 53 and 23 in this order. Would they always be in this order?
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
53 |
23 |
34 |
34 |
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
I put 53 and 23 in this order. Would they always be in this order?
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
53 |
23 |
34 |
34 |
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
12 |
12 |
13️ |
22 |
23️ |
?? |
?? |
?? |
?? |
4️1 |
4️1 |
4️2 |
In what order will 31,
32, 34, and 34 appear?
Digit-by-digit Sorting
As a warmup to the later part of today’s lecture. Suppose we have a list of integers we want to sort.
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
53 |
23 |
34 |
34 |
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
12 |
12 |
13️ |
22 |
23️ |
31 |
32 |
34 |
34 |
4️1 |
4️1 |
4️2 |
Digit-by-digit Sorting
This procedure does not work if the sort subroutine is unstable.
4️1 |
4️1 |
3️1 |
3️2 |
22 |
12 |
12 |
4️2 |
53 |
23 |
34 |
34 |
22 |
3️4️ |
4️1 |
53️ |
23️ |
4️1 |
3️2 |
3️4️ |
12 |
3️1 |
12 |
4️2 |
12 |
12 |
13️ |
22 |
23️ |
34 |
32 |
31 |
34 |
4️1 |
4️1 |
4️2 |
Digit-by-digit Sorting
Example of a digit-by-digit sort:
322 |
43️4️ |
14️1 |
353️ |
223️ |
34️1 |
43️2 |
23️4️ |
112 |
33️1 |
412 |
34️2 |
141 |
341 |
331 |
322 |
432 |
112 |
412 |
342 |
353 |
223 |
434 |
234 |
112 |
412 |
322 |
223 |
331 |
432 |
434 |
234 |
141 |
341 |
342 |
353 |
112 |
141 |
223 |
234 |
322 |
331 |
341 |
342 |
353 |
412 |
432 |
434 |
Last digit is 3
Mid digit is 3
Top digit is 3
Digit-by-digit Sorting
Two quick notes:
322 |
43️4️ |
14️1 |
353️ |
223️ |
34️1 |
43️2 |
23️4️ |
112 |
33️1 |
412 |
34️2 |
141 |
341 |
331 |
322 |
432 |
112 |
412 |
342 |
353 |
223 |
434 |
234 |
112 |
412 |
322 |
223 |
331 |
432 |
434 |
234 |
141 |
341 |
342 |
353 |
112 |
141 |
223 |
234 |
322 |
331 |
341 |
342 |
353 |
412 |
432 |
434 |
Last digit is 3
Mid digit is 3
Top digit is 3
We’ll come back to digit-by-digit sorting later!
The Counting Sort Algorithm
Lecture 35, CS61B, Spring 2023
Warmup: Digit-by-digit Sorting
Counting Sort
Radix Sorts:
Comparison Based Sorting
The key idea from our previous sorting lecture: Sorting requires Ω(N log N) compares in the worst case.
From an asymptotic perspective, that means no matter how clever we are, we can never beat Merge Sort’s worst case runtime of Θ(N log N).
Example #1: Sleep Sort (for Sorting Integers) (not actually good)
For each integer x in array A, start a new program that:
All start at the same time.
Runtime:
Invented by 4chan (?).
The catch: On real machines, scheduling execution of programs must be done by an operating system. In practice requires list of running programs sorted by sleep time.
Example #2: Counting Sort: Exploiting Space Instead of Time
Assuming keys are unique integers 0 to 11.
Idea:
# | | | |
5 | Sandra | Vanilla | Grimes |
0 | Lauren | Mint | Jon Talabot |
11 | Lisa | Vanilla | Blue Peter |
9 | Dave | Chocolate | Superpope |
4 | JS | Fish | The Filthy Reds |
7 | James | Rocky Road | Robots are Supreme |
3 | Edith | Vanilla | My Bloody Valentine |
6 | Swimp | Chocolate | Sef |
1 | Delbert | Strawberry | Ronald Jenkees |
2 | Glaser | Cardamom | Rx Nightly |
8 | Lee | Vanilla | La(r)va |
10 | Bearman | Butter Pecan | Extrobophile |
Example #2: Counting Sort: Exploiting Space Instead of Time
# | | | |
5 | Sandra | Vanilla | Grimes |
0 | Lauren | Mint | Jon Talabot |
11 | Lisa | Vanilla | Blue Peter |
9 | Dave | Chocolate | Superpope |
4 | JS | Fish | The Filthy Reds |
7 | James | Rocky Road | Robots are Supreme |
3 | Edith | Vanilla | My Bloody Valentine |
6 | Swimp | Chocolate | Sef |
1 | Delbert | Strawberry | Ronald Jenkees |
2 | Glaser | Cardamom | Rx Nightly |
8 | Lee | Vanilla | La(r)va |
10 | Bearman | Butter Pecan | Extrobophile |
# | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
5 | Sandra | Vanilla | Grimes |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
Example #2: Counting Sort: Exploiting Space Instead of Time
# | | | |
5 | Sandra | Vanilla | Grimes |
0 | Lauren | Mint | Jon Talabot |
11 | Lisa | Vanilla | Blue Peter |
9 | Dave | Chocolate | Superpope |
4 | JS | Fish | The Filthy Reds |
7 | James | Rocky Road | Robots are Supreme |
3 | Edith | Vanilla | My Bloody Valentine |
6 | Swimp | Chocolate | Sef |
1 | Delbert | Strawberry | Ronald Jenkees |
2 | Glaser | Cardamom | Rx Nightly |
8 | Lee | Vanilla | La(r)va |
10 | Bearman | Butter Pecan | Extrobophile |
# | | | |
0 | Lauren | Mint | Jon Talabot |
| | | |
| | | |
| | | |
| | | |
5 | Sandra | Vanilla | Grimes |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
Example #2: Counting Sort: Exploiting Space Instead of Time
# | | | |
5 | Sandra | Vanilla | Grimes |
0 | Lauren | Mint | Jon Talabot |
11 | Lisa | Vanilla | Blue Peter |
9 | Dave | Chocolate | Superpope |
4 | JS | Fish | The Filthy Reds |
7 | James | Rocky Road | Robots are Supreme |
3 | Edith | Vanilla | My Bloody Valentine |
6 | Swimp | Chocolate | Sef |
1 | Delbert | Strawberry | Ronald Jenkees |
2 | Glaser | Cardamom | Rx Nightly |
8 | Lee | Vanilla | La(r)va |
10 | Bearman | Butter Pecan | Extrobophile |
# | | | |
0 | Lauren | Mint | Jon Talabot |
| | | |
| | | |
| | | |
| | | |
5 | Sandra | Vanilla | Grimes |
| | | |
| | | |
| | | |
| | | |
| | | |
11 | Lisa | Vanilla | Blue Peter |
Example #2: Counting Sort: Exploiting Space Instead of Time
# | | | |
5 | Sandra | Vanilla | Grimes |
0 | Lauren | Mint | Jon Talabot |
11 | Lisa | Vanilla | Blue Peter |
9 | Dave | Chocolate | Superpope |
4 | JS | Fish | The Filthy Reds |
7 | James | Rocky Road | Robots are Supreme |
3 | Edith | Vanilla | My Bloody Valentine |
6 | Swimp | Chocolate | Sef |
1 | Delbert | Strawberry | Ronald Jenkees |
2 | Glaser | Cardamom | Rx Nightly |
8 | Lee | Vanilla | La(r)va |
10 | Bearman | Butter Pecan | Extrobophile |
# | | | |
0 | Lauren | Mint | Jon Talabot |
1 | Delbert | Strawberry | Ronald Jenkees |
2 | Glaser | Cardamom | Rx Nightly |
3 | Edith | Vanilla | My Bloody Valentine |
4 | JS | Fish | The Filthy Reds |
5 | Sandra | Vanilla | Grimes |
6 | Swimp | Chocolate | Sef |
7 | James | Rocky Road | Robots are Supreme |
8 | Lee | Vanilla | La(r)va |
9 | Dave | Chocolate | Superpope |
10 | Bearman | Butter Pecan | Extrobophile |
11 | Lisa | Vanilla | Blue Peter |
Generalizing Counting Sort
We just sorted N items in Θ(N) worst case time.
Simplest case:
More complex cases:
Counting Sort: http://yellkey.com/seven
Alphabet case: Keys belong to a finite ordered alphabet.
Question: What will be the index of the first ♥?
| |
♠ | Lauren |
♥️ | Delbert |
♦️ | Glaser |
♣️ | Edith |
♠ | JS |
♦️ | Sandra |
♥️ | Swimp |
♥️ | James |
♣️ | Lee |
♥️ | Dave |
♣️ | Bearman |
♦️ | Lisa |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
0
1
2
3
4
5
6
7
8
9
10
11
Sorted
Counting Sort
Alphabet case: Keys belong to a finite ordered alphabet.
Question: What will be the index of the first ♥?
| |
♠ | Lauren |
♥️ | Delbert |
♦️ | Glaser |
♣️ | Edith |
♠ | JS |
♦️ | Sandra |
♥️ | Swimp |
♥️ | James |
♣️ | Lee |
♥️ | Dave |
♣️ | Bearman |
♦️ | Lisa |
| |
♣️ | |
♣️ | |
♣️ | |
♠ | |
♠ | |
| |
| |
| |
| |
| |
| |
| |
0
1
2
3
4
5
6
7
8
9
10
11
Sorted
Implementing Counting Sort with Counting Arrays
Counting sort:
Bottom line, we can use counting sort to sort N objects in Θ(N) time.
Counting Sort Runtime
Lecture 35, CS61B, Spring 2023
Warmup: Digit-by-digit Sorting
Counting Sort
Radix Sorts:
Counting Sort vs. Quicksort: http://yellkey.com/just
For sorting an array of the 100 largest cities by population, which sort do you think has a better expected worst case runtime in seconds?
First question to ask yourself: What is the alphabet for counting sort here?
Counting Sort vs. Quicksort
For sorting an array of the 100 largest cities by population, which sort do you think has a better expected worst case runtime in seconds?
Counting sort requires building an array of size 37,832,892 (population of Tokyo).
| |
6352254 | Ahmedabad |
4778000 | Alexandria |
5346518 | Ankara |
6555956 | Atlanta |
8495928 | Bandung |
12517749 | Bangalore |
... | ... |
... | ... |
4777999 | 0 |
4778000 | 1 |
4778001 | 0 |
4778002 | 0 |
... | ... |
37832892 | 1 |
Counts
...
Counting Sort Runtime Analysis
What is the runtime for counting sort on N keys with alphabet of size R?
Counting Sort Runtime Analysis
Total runtime on N keys with alphabet of size R: Θ(N+R)
Memory usage: Θ(N+R)
Bottom line: If N is ≥ R, then we expect reasonable performance.
Empirical experiments needed to compare vs. Quicksort on practical inputs.
For ordered array.
For counts and starting points.
See hidden slide after this for a more verbose explanation.
Counting Sort Runtime Analysis (More Verbose)
Total runtime on N keys with alphabet of size R: Θ(N+R)
Memory usage: Θ(N+R)
Bottom line: If N is ≥ R, then we expect reasonable performance.
Empirical experiments needed to compare vs. Quicksort on practical inputs.
For ordered array.
For counts and starting points.
Counting Sort vs. Quicksort
Give an example of a specific situation where Counting Sort will be clearly faster than Quicksort.
Previous example was sorting N = 100 cities by population (R = 37,832,892).
Counting Sort vs. Quicksort
Give an example of a specific situation where Counting Sort will be clearly faster than Quicksort.
Sort Summary
Counting sort is nice, but alphabetic restriction limits usefulness.
N: Number of keys. R: Size of alphabet.
| Memory | Runtime | Notes | Stable? |
Heapsort | Θ(1) | Θ(N log N) | Bad caching (61C) | No |
Insertion | Θ(1) | Θ(N2) | Small N, almost sorted | Yes |
Mergesort | Θ(N) | Θ(N log N) | Fastest stable | Yes |
Random Quicksort | Θ(log N) | Θ(N log N) expected | Fastest compare sort | No |
Counting Sort | Θ(N+R) | Θ(N+R) | Alphabet keys only | Yes |
LSD Radix Sort
Lecture 35, CS61B, Spring 2023
Warmup: Digit-by-digit Sorting
Counting Sort
Radix Sorts
Radix Sort
Counting sort is slow when the alphabet is large.
| |
♠♠ | Lauren |
♥️♦️ | Delbert |
♦️♣️ | Glaser |
♣️♥️ | Edith |
♠♥️ | JS |
♦️♣️ | Sandra |
♥️♠ | Swimp |
♥️♦️ | James |
♣️♠ | Lee |
♥️♣️ | Dave |
♣️♠ | Bearman |
♦️♠ | Lisa |
| |
horse | Lauren |
elf | Delbert |
cat | Glaser |
crab | Edith |
monkey | JS |
rhino | Sandra |
raccoon | Swimp |
cat | James |
fish | Lee |
tree | Dave |
virus | Bearman |
human | Lisa |
| |
4238 | Lauren |
34163 | Delbert |
123 | Glaser |
43415 | Edith |
9918 | JS |
767 | Sandra |
3 | Swimp |
634 | James |
724 | Lee |
2346 | Dave |
457 | Bearman |
312 | Lisa |
Digit-by-digit Counting Sort
As we’ve seen, we can sort each digit independently from rightmost digit towards left.
| |
♠♠ | Lauren |
♥️♦️ | Delbert |
♦️♣️ | Glaser |
♣️♥️ | Edith |
♠♥️ | JS |
♦️♣️ | Sandra |
♥️♠ | Swimp |
♥️♦️ | James |
♣️♠ | Lee |
♥️♣️ | Dave |
♣️♠ | Bearman |
♦️♠ | Lisa |
| |
♦️♣️ | Glaser |
♦️♣️ | Sandra |
♥️♣️ | Dave |
♠♠ | Lauren |
♥️♠ | Swimp |
♣️♠ | Lee |
♣️♠ | Bearman |
♦️♠ | Lisa |
♣️♥️ | Edith |
♠♥️ | JS |
♥️♦️ | Delbert |
♥️♦️ | James |
| |
♣️♠ | Lee |
♣️♠ | Bearman |
♣️♥️ | Edith |
♠♠ | Lauren |
♠♥️ | JS |
♥️♣️ | Dave |
♥️♠ | Swimp |
♥️♦️ | Delbert |
♥️♦️ | James |
♦️♣️ | Glaser |
♦️♣️ | Sandra |
♦️♠ | Lisa |
Digit-by-digit Counting Sort
Sort each digit independently from rightmost digit towards left.
| |
22 | Lauren |
3️4️ | Delbert |
4️1 | Glaser |
13️ | Edith |
23️ | JS |
4️1 | Sandra |
3️2 | Swimp |
3️4️ | James |
12 | Lee |
3️1 | Dave |
12 | Bearman |
4️2 | Lisa |
| |
4️1 | Glaser |
4️1 | Sandra |
3️1 | Dave |
22 | Lauren |
32 | Swimp |
12 | Lee |
12 | Bearman |
4️2 | Lisa |
13️ | Edith |
23️ | JS |
3️4️ | Delbert |
3️4️ | James |
| |
12 | Lee |
12 | Bearman |
13️ | Edith |
22 | Lauren |
23️ | JS |
3️1 | Dave |
3️2 | Swimp |
3️4️ | Delbert |
3️4️ | James |
4️1 | Glaser |
4️1 | Sandra |
4️2 | Lisa |
LSD Radix Sort
Non-comparison based sorting algorithms that proceed digit-by-digit are called “Radix Sorts”.
Via wikipedia: “In a positional numeral system, the radix or base is the number of unique digits, including the digit zero, used to represent numbers.”
The sort we’ve just discussed is called “LSD Radix Sort”.
LSD Runtime
What is the runtime of LSD sort?
| |
22 | Lauren |
3️4️ | Delbert |
4️1 | Glaser |
13️ | Edith |
23️ | JS |
4️1 | Sandra |
3️2 | Swimp |
3️4️ | James |
12 | Lee |
3️1 | Dave |
12 | Bearman |
4️2 | Lisa |
| |
4️1 | Glaser |
4️1 | Sandra |
3️1 | Dave |
22 | Lauren |
32 | Swimp |
12 | Lee |
12 | Bearman |
4️2 | Lisa |
13️ | Edith |
23️ | JS |
3️4️ | Delbert |
3️4️ | James |
| |
12 | Lee |
12 | Bearman |
13️ | Edith |
22 | Lauren |
23️ | JS |
3️1 | Dave |
3️2 | Swimp |
3️4️ | Delbert |
3️4️ | James |
4️1 | Glaser |
4️1 | Sandra |
4️2 | Lisa |
LSD Runtime
What is the runtime of LSD sort?
| |
22 | Lauren |
3️4️ | Delbert |
4️1 | Glaser |
13️ | Edith |
23️ | JS |
4️1 | Sandra |
3️2 | Swimp |
3️4️ | James |
12 | Lee |
3️1 | Dave |
12 | Bearman |
4️2 | Lisa |
| |
4️1 | Glaser |
4️1 | Sandra |
3️1 | Dave |
22 | Lauren |
32 | Swimp |
12 | Lee |
12 | Bearman |
4️2 | Lisa |
13️ | Edith |
23️ | JS |
3️4️ | Delbert |
3️4️ | James |
| |
12 | Lee |
12 | Bearman |
13️ | Edith |
22 | Lauren |
23️ | JS |
3️1 | Dave |
3️2 | Swimp |
3️4️ | Delbert |
3️4️ | James |
4️1 | Glaser |
4️1 | Sandra |
4️2 | Lisa |
Non-equal Key Lengths
After processing least significant digit, we have array shown below. Now what?
43 |
9 |
817 |
412 |
51 |
33 |
71 |
51 |
71 |
412 |
43 |
33 |
817 |
9 |
Non-equal Key Lengths
When keys are of different lengths, can treat empty spaces as less than all other characters.
·43 |
··9 |
817 |
412 |
·51 |
·33 |
·71 |
·51 |
·71 |
412 |
·43 |
·33 |
817 |
··9 |
··9 |
412 |
817 |
·33 |
·43 |
·51 |
·71 |
··9 |
·33 |
·43 |
·51 |
·71 |
412 |
817 |
Sorting Summary
W passes of counting sort: Θ(WN+WR) runtime.
N: Number of keys. R: Size of alphabet. W: Width of longest key.
*: Assumes constant compareTo time.
| Memory | Runtime | Notes | Stable? |
Heapsort | Θ(1) | Θ(N log N)* | Bad caching (61C) | No |
Insertion | Θ(1) | Θ(N2)* | Small N, almost sorted | Yes |
Mergesort | Θ(N) | Θ(N log N)* | Fastest stable sort | Yes |
Random Quicksort | Θ(log N) | Θ(N log N)* expected | Fastest compare sort | No |
Counting Sort | Θ(N+R) | Θ(N+R) | Alphabet keys only | Yes |
LSD Sort | Θ(N+R) | Θ(WN+WR) | Strings of alphabetical keys only | Yes |
MSD Radix Sort
Lecture 35, CS61B, Spring 2023
Warmup: Digit-by-digit Sorting
Counting Sort
Radix Sorts
MSD (Most Significant Digit) Radix Sort
Basic idea: Just like LSD, but sort from leftmost digit towards the right.
Pseudopseudohypoparathyroidism |
Floccinaucinihilipilification |
Antidisestablishmentarianism |
Honorificabilitudinitatibus |
Pneumonoultramicroscopicsilicovolcanoconiosis |
MSD Sort Question: http://yellkey.com/ground
Suppose we sort by topmost digit, then middle digit, then rightmost digit. Will we arrive at the correct result? A. Yes, B. No
a | d | d |
c | a | b |
f | a | d |
f | e | e |
b | a | d |
b | e | e |
f | e | d |
b | e | d |
a | c | e |
a | d | d |
a | c | e |
b | a | d |
b | e | e |
b | e | d |
c | a | b |
f | a | d |
f | e | e |
f | e | d |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
MSD Sort Question
Suppose we sort by topmost digit, then middle digit, then rightmost digit. Will we arrive at the correct result? A. Yes, B. No. How do we fix?
a | d | d |
c | a | b |
f | a | d |
f | e | e |
b | a | d |
b | e | e |
f | e | d |
b | e | d |
a | c | e |
a | d | d |
a | c | e |
b | a | d |
b | e | e |
b | e | d |
c | a | b |
f | a | d |
f | e | e |
f | e | d |
b | a | d |
| | |
| | |
| | |
| | |
a | d | d |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
MSD Radix Sort (correct edition)
Key idea: Sort each subproblem separately.
a | d | d |
c | a | b |
f | a | d |
f | e | e |
b | a | d |
b | e | e |
f | e | d |
b | e | d |
a | c | e |
f | a | d |
f | e | e |
f | e | d |
a | d | d |
a | c | e |
b | a | d |
b | e | e |
b | e | d |
c | a | b |
a | c | e |
b | a | d |
f | e | e |
f | e | d |
a | d | d |
b | e | e |
b | e | d |
f | a | d |
b | e | d |
b | e | e |
f | e | d |
f | e | e |
Runtime of MSD
What is the Best Case of MSD sort (in terms of N, W, R)?
What is the Worst Case of MSD sort (in terms of N, W, R)?
Runtime of MSD
Best Case.
Worst Case.
Sorting Runtime Analysis
N: Number of keys. R: Size of alphabet. W: Width of longest key.
*: Assumes constant compareTo time.
| Memory | Runtime (worst) | Notes | Stable? |
Heapsort | Θ(1) | Θ(N log N)* | Bad caching (61C) | No |
Insertion | Θ(1) | Θ(N2)* | Fastest for small N, almost sorted data | Yes |
Mergesort | Θ(N) | Θ(N log N)* | Fastest stable sort | Yes |
Random Quicksort | Θ(log N) | Θ(N log N)* expected | Fastest compare sort | No |
Counting Sort | Θ(N+R) | Θ(N+R) | Alphabet keys only | Yes |
LSD Sort | Θ(N+R) | Θ(WN+WR) | Strings of alphabetical keys only | Yes |
MSD Sort | Θ(N+WR) | Θ(N+R) (best) Θ(WN+WR) (worst) | Bad caching (61C) | Yes |
Sounds of Sorting Algorithms
Starts with selection sort: https://www.youtube.com/watch?v=kPRA0W1kECg
Insertion sort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=0m9s
Quicksort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=0m38s
Mergesort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=1m05s
Heapsort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=1m28s
LSD sort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=1m54s
MSD sort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=2m10s
Shell’s sort: https://www.youtube.com/watch?v=kPRA0W1kECg&t=3m37s
Questions to ponder (later… after class):
Citations
Creepy eye thing, title slide: http://photos3.meetupstatic.com/photos/event/a/3/f/4/highres_335141972.jpeg