0% found this document useful (0 votes)
34 views

CS 373: Design & Analysis of Algorithms: Linear-Time Sorting Algorithms

This document discusses various sorting algorithms and their time complexities. It introduces counting sort and radix sort as linear-time sorting algorithms that do not rely on comparisons. Counting sort works by counting the number of objects that fall into each "bucket" and is linear (O(n)) when the range of keys being sorted is O(n). Radix sort applies counting sort repeatedly on each digit of multi-digit numbers to stably sort in linear (O(n)) time when the number of digits is small.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views

CS 373: Design & Analysis of Algorithms: Linear-Time Sorting Algorithms

This document discusses various sorting algorithms and their time complexities. It introduces counting sort and radix sort as linear-time sorting algorithms that do not rely on comparisons. Counting sort works by counting the number of objects that fall into each "bucket" and is linear (O(n)) when the range of keys being sorted is O(n). Radix sort applies counting sort repeatedly on each digit of multi-digit numbers to stably sort in linear (O(n)) time when the number of digits is small.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 24

CS 373: Design & Analysis of

Algorithms

Linear-Time Sorting Algorithms

Dr. Sifat Momen 1 10/27/2018


Sorting So Far
 Insertion sort:
 Easy to code
 Fast on small inputs (less than ~50 elements)
 Fast on nearly-sorted inputs
 O(n2) worst case
 O(n2) average (equally-likely inputs) case
 O(n2) reverse-sorted case

Dr. Sifat Momen 1 10/27/2018


Sorting So Far
 Merge sort:
 Divide-and-conquer:
 Split array in half
 Recursively sort subarrays
 Linear-time merge step
 O(n lg n) worst case
 Doesn’t sort in place

Dr. Sifat Momen 1 10/27/2018


Sorting So Far
 Heap sort:
 Uses the very useful heap data structure
 Complete binary tree
 Heap property: parent key > children’s keys
 O(n lg n) worst case
 Sorts in place
 Fair amount of shuffling memory around

Dr. Sifat Momen 1 10/27/2018


Sorting So Far
 Quick sort:
 Divide-and-conquer:
 Partition array into two subarrays, recursively sort
 All of first subarray < all of second subarray
 No merge step needed!
 O(n lg n) average case
 Fast in practice
 O(n2) worst case
 Naïve implementation: worst case on sorted input
 Address this with randomized quicksort

Dr. Sifat Momen 1 10/27/2018


How Fast Can We Sort?
 We will provide a lower bound, then beat it
 How do you suppose we’ll beat it?
 First, an observation: all of the sorting
algorithms so far are comparison sorts
 The only operation used to gain ordering
information about a sequence is the pairwise
comparison of two elements
 Theorem: all comparison sorts are (n lg n)

Dr. Sifat Momen 1 10/27/2018


Comparison Model
 All the items are black boxes.
 Only operations allowed are comparisons (<,
≤, >, ≥, =)
 Time cost = # of comparisons made.

Dr. Sifat Momen 1 10/27/2018


Decision Trees
 Decision trees provide an abstraction of
comparison sorts
 A decision tree represents the comparisons made
by a comparison sort. Every thing else ignored

 What do the leaves represent?


 How many leaves must there be?

Dr. Sifat Momen 1 10/27/2018


Decision Trees

Dr. Sifat Momen 1 10/27/2018


Decision Trees
Decision Tree Algorithm
Every internal node Binary decision (comparison)
Leaf Answer
Root  Leaf Algorithm execution
Length of the path Running time
Height of the tree Worst case running time

Dr. Sifat Momen 1 10/27/2018


Lower Bound For
Comparison Sorting
 What’s the minimum # of leaves?
 What’s the maximum # of leaves of a binary
tree of height h?
 Clearly the minimum # of leaves is less than or
equal to the maximum # of leaves

Dr. Sifat Momen 1 10/27/2018


Lower Bound For
Comparison Sorting
 So we have…
n!  2h
 Taking logarithms:
lg (n!)  h
 Stirling’s approximation tells us:

n
n
n!   
e n
 Thus: n
h  lg 
e
Dr. Sifat Momen 1 10/27/2018
Lower Bound For
Comparison Sorting
 So we have
n
n
h  lg 
e

 n lg n  n lg e

 Thus  n minimum
 the lg n  height of a decision tree is (n lg n)

Dr. Sifat Momen 1 10/27/2018


Lower Bound For
Comparison Sorts
 Thus the time to comparison sort n elements is
(n lg n)
 Corollary: Heapsort and Mergesort are
asymptotically optimal comparison sorts
 But the name of this lecture is “Sorting in
linear time”!
 How can we do better than (n lg n)?

Dr. Sifat Momen 1 10/27/2018


Sorting In Linear Time
 Counting sort
 No comparisons between elements!
 But…depends on assumption about the numbers
being sorted
 We assume numbers are in the range 1.. k
 The algorithm:
 Input: A[1..n], where A[j]  {1, 2, 3, …, k}
 Output: B[1..n], sorted (notice: not sorting in place)
 Also: Array C[1..k] for auxiliary storage

Dr. Sifat Momen 1 10/27/2018


Counting Sort
1 CountingSort(A, B, k)
2 Let C[0.. K] be a new array
2 for i=0 to k
3 C[i]= 0;
4 for j=1 to A.length
5 C[A[j]] = C[A[j]] + 1;
6 for i=1 to k
7 C[i] = C[i] + C[i-1];
8 for j=A.length downto 1
9 B[C[A[j]]] = A[j];
10 C[A[j]] = C[A[j]] - 1;

Dr. Sifat Momen 1 10/27/2018


Counting Sort
 Total time: O(n + k)
 Usually, k = O(n)
 Thus counting sort runs in O(n) time
 But sorting is (n lg n)!
 No contradiction--this is not a comparison sort (in
fact, there are no comparisons at all!)
 Notice that this algorithm is stable

Dr. Sifat Momen 1 10/27/2018


Radix Sort
 Intuitively, you might sort on the most
significant digit, then the second msd, etc.
 Problem: lots of intermediate piles of cards
(read: scratch arrays) to keep track of
 Key idea: sort the least significant digit first

RadixSort(A, d)
for i=1 to d
StableSort(A) on digit i

Dr. Sifat Momen 1 10/27/2018


Radix Sort

Dr. Sifat Momen 1 10/27/2018


Radix Sort
 What sort will we use to sort on digits?
 Counting sort is obvious choice:
 Sort n numbers on digits that range from 1..k
 Time: O(n + k)
 Each pass over n numbers with d digits takes
time O(n+k), so total time O(dn+dk)
 When d is constant and k=O(n), takes O(n) time

Dr. Sifat Momen 1 10/27/2018


Radix Sort
 In general, radix sort based on counting sort is
 Fast
 Asymptotically fast (i.e., O(n))
 Simple to code
 A good choice

Dr. Sifat Momen 1 10/27/2018


Bucket Sort

Dr. Sifat Momen 1 10/27/2018


Bucket Sort

Dr. Sifat Momen 1 10/27/2018


Time Complexity

Dr. Sifat Momen 1 10/27/2018

You might also like