1 of 55

Announcement

Feel free to use LLMs (ChatGPT, etc) however you want on phase 2.

  • Make sure to cite.

My OH are as normal today 2 - 3 in 779 Soda.

2 of 55

Radix Sorts

2

Lecture 35

CS61B, Spring 2023 @ UC Berkeley

Josh Hug and Justin Yokota

3 of 55

Today’s Two New Ideas

Today we’ll cover two new ideas:

  • Digit-by-Digit Sorting
    • A procedure that uses a sort (e.g. Merge Sort, Quicksort, Counting Sort).
    • Using the word “sort” is arguably a misnomer.
      • Digit-by-digit sorting is a process that uses another sort as a subroutine.
  • Counting Sort
    • A new type of sort that competes with Merge Sort, Quicksort, Heap Sort, Insertion Sort, Selection Sort, etc.
    • Unlike these other sorts, Counting Sort does not use compareTo.

4 of 55

Warmup: Digit-by-digit Sorting

Lecture 35, CS61B, Spring 2023

Warmup: Digit-by-digit Sorting

Counting Sort

  • Procedure
  • Runtime

Radix Sorts

  • LSD Radix Sort
  • MSD Radix Sort

5 of 55

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.

  • Suppose we first sort by only the rightmost digit.

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

6 of 55

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.

  • Suppose we first sort by only the rightmost digit.

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

7 of 55

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.

  • Suppose we first sort by only the rightmost digit.

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

8 of 55

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.

  • Suppose we first sort by only the rightmost digit.

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?

9 of 55

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.

  • Suppose we first sort by only the rightmost digit.

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?

  • Not necessarily! Depends on if the sort I used is stable.
  • Stable sort yields 53 then 23.
  • Example: If I used Quicksort with shuffle, could have been 23 then 53.

10 of 55

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.

  • Now suppose we sort by the left digit using a stable 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?

11 of 55

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.

  • Now suppose we sort by the left digit using a stable 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

12 of 55

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

13 of 55

Digit-by-digit Sorting

Example of a digit-by-digit sort:

  • Use a stable sort on each digit, moving from least to most significant.
  • Result is guaranteed to correct!

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

14 of 55

Digit-by-digit Sorting

Two quick notes:

  • No obvious reason why this procedure is useful (can just sort by entire integer)
  • Other digit-by-digit sort procedures work.

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!

15 of 55

The Counting Sort Algorithm

Lecture 35, CS61B, Spring 2023

Warmup: Digit-by-digit Sorting

Counting Sort

  • The Counting Sort Algorithm
  • Runtime

Radix Sorts:

  • LSD Radix Sort
  • MSD Radix Sort

16 of 55

Comparison Based Sorting

The key idea from our previous sorting lecture: Sorting requires Ω(N log N) compares in the worst case.

  • Thus, the ultimate comparison based sorting algorithm has a worst case runtime of Θ(N log N).

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).

  • ...but what if we don’t compare at all?

17 of 55

Example #1: Sleep Sort (for Sorting Integers) (not actually good)

For each integer x in array A, start a new program that:

  • Sleeps for x seconds.
  • Prints x.

All start at the same time.

Runtime:

  • N + max(A)

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.

18 of 55

Example #2: Counting Sort: Exploiting Space Instead of Time

Assuming keys are unique integers 0 to 11.

Idea:

  • Create a new array.
  • Copy item with key i into ith entry of new array.

#

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

19 of 55

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

20 of 55

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

21 of 55

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

22 of 55

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

23 of 55

Generalizing Counting Sort

We just sorted N items in Θ(N) worst case time.

  • Avoiding yes/no questions lets us dodge our lower bound based on puppy, cat, dog!

Simplest case:

  • Keys are unique integers from 0 to N-1.

More complex cases:

  • Non-unique keys.
  • Non-consecutive keys.
  • Non-numerical keys.

24 of 55

Counting Sort: http://yellkey.com/seven

Alphabet case: Keys belong to a finite ordered alphabet.

  • Example: {♣, ♠, , } (in that order)

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

25 of 55

Counting Sort

Alphabet case: Keys belong to a finite ordered alphabet.

  • Example: {♣, ♠, , } (in that order)

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

26 of 55

Implementing Counting Sort with Counting Arrays

Counting sort:

  • Count number of occurrences of each item.
  • Iterate through list, using count array to decide where to put everything.
  • Interactive Demo

Bottom line, we can use counting sort to sort N objects in Θ(N) time.

27 of 55

Counting Sort Runtime

Lecture 35, CS61B, Spring 2023

Warmup: Digit-by-digit Sorting

Counting Sort

  • Procedure
  • Runtime

Radix Sorts:

  • LSD Radix Sort
  • MSD Radix Sort

28 of 55

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?

  1. Counting Sort (as described in our demo)
  2. Quicksort

First question to ask yourself: What is the alphabet for counting sort here?

29 of 55

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 (as described in our demo)
  • Quicksort

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

...

30 of 55

Counting Sort Runtime Analysis

What is the runtime for counting sort on N keys with alphabet of size R?

  • Treat R as a variable, not a constant.

31 of 55

Counting Sort Runtime Analysis

Total runtime on N keys with alphabet of size R: Θ(N+R)

  • Creating and filling our count-related arrays: Θ(R)
    • Example: R = 4 for four card suits.
  • Counting each item and copying into new array: Θ(N)

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.

32 of 55

Counting Sort Runtime Analysis (More Verbose)

Total runtime on N keys with alphabet of size R: Θ(N+R)

  • Create an array of size R to store counts: Θ(R)
  • Counting number of each item: Θ(N)
  • Calculating target positions of each item: Θ(R)
  • Creating an array of size N to store ordered data: Θ(N)
  • Copying items from original array to ordered array: Do N times:
    • Check target position: Θ(1)
    • Update target position: Θ(1)
  • Copying items from ordered array back to original array: Θ(N)�

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.

33 of 55

Counting Sort vs. Quicksort

Give an example of a specific situation where Counting Sort will be clearly faster than Quicksort.

  • Counting Sort: Θ(N+R)
  • Quicksort: Θ(N log N)

Previous example was sorting N = 100 cities by population (R = 37,832,892).

34 of 55

Counting Sort vs. Quicksort

Give an example of a specific situation where Counting Sort will be clearly faster than Quicksort.

  • Counting Sort: Θ(N+R)
  • Quicksort: Θ(N log N)

35 of 55

Sort Summary

Counting sort is nice, but alphabetic restriction limits usefulness.

  • Idea: Let’s try digit-by-digit sorting.
  • The set of possible digits will be a relatively small alphabet.

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

36 of 55

LSD Radix Sort

Lecture 35, CS61B, Spring 2023

Warmup: Digit-by-digit Sorting

Counting Sort

  • Procedure
  • Runtime

Radix Sorts

  • LSD Radix Sort
  • MSD Radix Sort

37 of 55

Radix Sort

Counting sort is slow when the alphabet is large.

  • By decomposing input into a string of characters from a finite alphabet, we can force R to be small.

♠♠

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

38 of 55

Digit-by-digit Counting Sort

As we’ve seen, we can sort each digit independently from rightmost digit towards left.

  • Example: Over {♣, ♠, , }

♠♠

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

39 of 55

Digit-by-digit Counting Sort

Sort each digit independently from rightmost digit towards left.

  • Example: Over {1, 2, 3, 4}

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

40 of 55

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: Least Significant Digit.

41 of 55

LSD Runtime

What is the runtime of LSD sort?

  • Pick appropriate letters to represent non-constant terms.

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

42 of 55

LSD Runtime

What is the runtime of LSD sort?

  • Θ(WN+WR)
  • N: Number of items, R: size of alphabet, W: Width of each item in # digits

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

43 of 55

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

44 of 55

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

45 of 55

Sorting Summary

W passes of counting sort: Θ(WN+WR) runtime.

  • Annoying feature: Runtime depends on length of longest key.

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

46 of 55

MSD Radix Sort

Lecture 35, CS61B, Spring 2023

Warmup: Digit-by-digit Sorting

Counting Sort

  • Procedure
  • Runtime

Radix Sorts

  • LSD Radix Sort
  • MSD Radix Sort

47 of 55

MSD (Most Significant Digit) Radix Sort

Basic idea: Just like LSD, but sort from leftmost digit towards the right.

Pseudopseudohypoparathyroidism

Floccinaucinihilipilification

Antidisestablishmentarianism

Honorificabilitudinitatibus

Pneumonoultramicroscopicsilicovolcanoconiosis

48 of 55

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

49 of 55

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

50 of 55

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

51 of 55

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)?

52 of 55

Runtime of MSD

Best Case.

  • We finish in one counting sort pass, looking only at the top digit: Θ(N + R)

Worst Case.

  • We have to look at every character, degenerating to LSD sort: Θ(WN + WR)

53 of 55

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

54 of 55

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):

  • How many items are sorted in the video for selection sort?
  • Why does insertion sort take longer / more compares than selection sort?
  • At what time stamp does the first partition complete for Quicksort?
  • Could the size of the input used by mergesort in the video be a power of 2?
  • What do the colors mean for heapsort?
  • How many characters are in the alphabet used for the LSD sort problem?
  • How many digits are in the keys used for the LSD sort problem?

55 of 55

Citations