SlideShare a Scribd company logo
CS 332: Algorithms Linear-Time Sorting Algorithms
Sorting So Far Insertion sort: Easy to code Fast on small inputs (less than ~50 elements) Fast on nearly-sorted inputs O(n 2 ) worst case O(n 2 ) average (equally-likely inputs) case O(n 2 ) reverse-sorted case
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
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
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(n 2 ) worst case Naïve implementation: worst case on sorted input Address this with randomized quicksort
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) A comparison sort must do O(n) comparisons ( why? ) What about the gap between O(n) and O(n lg n)
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 (Draw examples on board) What do the leaves represent? How many leaves must there be?
Decision Trees Decision trees can model comparison sorts.  For a given algorithm: One tree for each  n Tree paths are all possible execution traces What’s the longest path in a decision tree for insertion sort?  For merge sort? What is the asymptotic height of any decision tree for sorting n elements? Answer:   ( n  lg  n )  (now let’s prove it…)
Lower Bound For  Comparison Sorting Thm: Any decision tree that sorts  n  elements has height   ( n  lg  n ) 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
Lower Bound For  Comparison Sorting So we have…  n !    2 h Taking logarithms:  lg ( n !)     h Stirling’s approximation tells us: Thus:
Lower Bound For  Comparison Sorting So we have Thus the minimum height of a decision tree is   ( n  lg  n )
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 ) ?
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
Counting Sort 1 CountingSort(A, B, k) 2 for i=1 to k 3 C[i]= 0; 4 for j=1 to n 5 C[A[j]] += 1; 6 for i=2 to k 7 C[i] = C[i] + C[i-1]; 8 for j=n downto 1 9 B[C[A[j]]] = A[j]; 10 C[A[j]] -= 1; Work through example: A={4 1 3 4 3}, k = 4
Counting Sort 1 CountingSort(A, B, k) 2 for i=1 to k 3 C[i]= 0; 4 for j=1 to n 5 C[A[j]] += 1; 6 for i=2 to k 7 C[i] = C[i] + C[i-1]; 8 for j=n downto 1 9 B[C[A[j]]] = A[j]; 10 C[A[j]] -= 1; What will be the running time? Takes time O(k) Takes time O(n)
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
Counting Sort Cool!  Why don’t we always use counting sort? Because it depends on range  k  of elements Could we use counting sort to sort 32 bit integers?  Why or why not? Answer: no,  k  too large (2 32  = 4,294,967,296)
Counting Sort How did IBM get rich originally? Answer: punched card readers for census tabulation in early 1900’s.  In particular, a  card sorter  that could sort cards into different bins Each column can be punched in 12 places Decimal digits use 10 places Problem: only one column can be sorted on at a time
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 Example: Fig 9.3
Radix Sort Can we prove it will work? Sketch of an inductive argument (induction on the number of passes): Assume lower-order digits {j: j<i}are sorted Show that sorting next digit i leaves array correctly sorted  If two digits at position i are different, ordering numbers by that digit is correct (lower-order digits irrelevant) If they are the same, numbers are already sorted on the lower-order digits.  Since we use a stable sort, the numbers stay in the right order
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 How many bits in a computer word?
Radix Sort Problem: sort 1 million 64-bit numbers Treat as four-digit radix 2 16  numbers Can sort in just four passes with radix sort! Compares well with typical O( n  lg  n ) comparison sort  Requires approx lg  n  = 20 operations per number being sorted So why would we ever use anything but radix sort?
Radix Sort In general, radix sort based on counting sort is Fast Asymptotically fast (i.e., O( n )) Simple to code A good choice To think about:  Can radix sort be used on floating-point numbers?
The End

More Related Content

PPTX
PPT On Sorting And Searching Concepts In Data Structure | In Programming Lang...
PPT
SEARCHING AND SORTING ALGORITHMS
PDF
Sorting Algorithms
PPTX
PPTX
Merge sort analysis and its real time applications
PDF
Binary Search - Design & Analysis of Algorithms
PDF
Sorting algorithm
PPTX
Coin Changing, Binary Search , Linear Search - Algorithm
PPT On Sorting And Searching Concepts In Data Structure | In Programming Lang...
SEARCHING AND SORTING ALGORITHMS
Sorting Algorithms
Merge sort analysis and its real time applications
Binary Search - Design & Analysis of Algorithms
Sorting algorithm
Coin Changing, Binary Search , Linear Search - Algorithm

What's hot (20)

PDF
Chapter 14 Searching and Sorting
PPT
L10 sorting-searching
PDF
linear search and binary search
PPTX
sorting and its types
PDF
Binary search algorithm
PPTX
single linked list
PPT
358 33 powerpoint-slides_15-hashing-collision_chapter-15
PPTX
Implementing Merge Sort
PDF
08 Hash Tables
PPTX
Binary search
PPTX
Selection sorting
PPTX
Different types of Shoring Algorithms with Animation
PPTX
Sorting and searching arrays binary search algorithm
PPTX
Sorting and Its Types
PPT
Binary Search
PPT
lists
PPTX
Selection sort algorithm presentation, selection sort example using power point
PPT
Ch17 Hashing
PPT
Data Structure and Algorithms Hashing
PPTX
Circular link list.ppt
Chapter 14 Searching and Sorting
L10 sorting-searching
linear search and binary search
sorting and its types
Binary search algorithm
single linked list
358 33 powerpoint-slides_15-hashing-collision_chapter-15
Implementing Merge Sort
08 Hash Tables
Binary search
Selection sorting
Different types of Shoring Algorithms with Animation
Sorting and searching arrays binary search algorithm
Sorting and Its Types
Binary Search
lists
Selection sort algorithm presentation, selection sort example using power point
Ch17 Hashing
Data Structure and Algorithms Hashing
Circular link list.ppt
Ad

Similar to lecture 9 (20)

PPT
Counting Sort Lowerbound
PDF
Linear time sorting algorithms
PPT
Cis435 week06
PPT
Counting sort(Non Comparison Sort)
PPT
lecture 10
PPTX
Sorting2
PPT
Lecture 21 Survey of Sorting.ppt ggggggggggg
PPTX
Advance Algorithm_unit_2_czcbcnhgjy.pptx
PPT
Sorting Seminar Presentation by Ashin Guha Majumder
PDF
CS375 Presentation-binary sort.pptx
PDF
Linear sort
PPTX
Sorting ppt
PPTX
Analysis of algorithms
PPT
RadixSort.ppt
PPTX
Algorithms and Data Structures - Parahyangan Catholic University Credit Lionov
PPTX
2.Problem Solving Techniques and Data Structures.pptx
PDF
Alg_Wks1_2.pdflklokjbhvkv jv .v.vk.hk kv h/k
PPTX
sorting-160810203705.pptx
Counting Sort Lowerbound
Linear time sorting algorithms
Cis435 week06
Counting sort(Non Comparison Sort)
lecture 10
Sorting2
Lecture 21 Survey of Sorting.ppt ggggggggggg
Advance Algorithm_unit_2_czcbcnhgjy.pptx
Sorting Seminar Presentation by Ashin Guha Majumder
CS375 Presentation-binary sort.pptx
Linear sort
Sorting ppt
Analysis of algorithms
RadixSort.ppt
Algorithms and Data Structures - Parahyangan Catholic University Credit Lionov
2.Problem Solving Techniques and Data Structures.pptx
Alg_Wks1_2.pdflklokjbhvkv jv .v.vk.hk kv h/k
sorting-160810203705.pptx
Ad

More from sajinsc (20)

PPT
lecture 30
PPT
lecture 29
PPT
lecture 28
PPT
lecture 27
PPT
lecture 26
PPT
lecture 25
PPT
lecture 24
PPT
lecture 23
PPT
lecture 22
PPT
lecture 21
PPT
lecture 20
PPT
lecture 19
PPT
lecture 18
PPT
lecture 17
PPT
lecture 16
PPT
lecture 15
PPT
lecture 14
PPT
lecture 13
PPT
lecture 12
PPT
lecture 11
lecture 30
lecture 29
lecture 28
lecture 27
lecture 26
lecture 25
lecture 24
lecture 23
lecture 22
lecture 21
lecture 20
lecture 19
lecture 18
lecture 17
lecture 16
lecture 15
lecture 14
lecture 13
lecture 12
lecture 11

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
A Presentation on Artificial Intelligence
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Modernizing your data center with Dell and AMD
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
The AUB Centre for AI in Media Proposal.docx
Unlocking AI with Model Context Protocol (MCP)
MYSQL Presentation for SQL database connectivity
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
A Presentation on Artificial Intelligence
Encapsulation_ Review paper, used for researhc scholars
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
NewMind AI Weekly Chronicles - August'25 Week I
Modernizing your data center with Dell and AMD
Understanding_Digital_Forensics_Presentation.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
20250228 LYD VKU AI Blended-Learning.pptx

lecture 9

  • 1. CS 332: Algorithms Linear-Time Sorting Algorithms
  • 2. Sorting So Far Insertion sort: Easy to code Fast on small inputs (less than ~50 elements) Fast on nearly-sorted inputs O(n 2 ) worst case O(n 2 ) average (equally-likely inputs) case O(n 2 ) reverse-sorted case
  • 3. 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
  • 4. 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
  • 5. 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(n 2 ) worst case Naïve implementation: worst case on sorted input Address this with randomized quicksort
  • 6. 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) A comparison sort must do O(n) comparisons ( why? ) What about the gap between O(n) and O(n lg n)
  • 7. 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 (Draw examples on board) What do the leaves represent? How many leaves must there be?
  • 8. Decision Trees Decision trees can model comparison sorts. For a given algorithm: One tree for each n Tree paths are all possible execution traces What’s the longest path in a decision tree for insertion sort? For merge sort? What is the asymptotic height of any decision tree for sorting n elements? Answer:  ( n lg n ) (now let’s prove it…)
  • 9. Lower Bound For Comparison Sorting Thm: Any decision tree that sorts n elements has height  ( n lg n ) 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
  • 10. Lower Bound For Comparison Sorting So we have… n !  2 h Taking logarithms: lg ( n !)  h Stirling’s approximation tells us: Thus:
  • 11. Lower Bound For Comparison Sorting So we have Thus the minimum height of a decision tree is  ( n lg n )
  • 12. 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 ) ?
  • 13. 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
  • 14. Counting Sort 1 CountingSort(A, B, k) 2 for i=1 to k 3 C[i]= 0; 4 for j=1 to n 5 C[A[j]] += 1; 6 for i=2 to k 7 C[i] = C[i] + C[i-1]; 8 for j=n downto 1 9 B[C[A[j]]] = A[j]; 10 C[A[j]] -= 1; Work through example: A={4 1 3 4 3}, k = 4
  • 15. Counting Sort 1 CountingSort(A, B, k) 2 for i=1 to k 3 C[i]= 0; 4 for j=1 to n 5 C[A[j]] += 1; 6 for i=2 to k 7 C[i] = C[i] + C[i-1]; 8 for j=n downto 1 9 B[C[A[j]]] = A[j]; 10 C[A[j]] -= 1; What will be the running time? Takes time O(k) Takes time O(n)
  • 16. 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
  • 17. Counting Sort Cool! Why don’t we always use counting sort? Because it depends on range k of elements Could we use counting sort to sort 32 bit integers? Why or why not? Answer: no, k too large (2 32 = 4,294,967,296)
  • 18. Counting Sort How did IBM get rich originally? Answer: punched card readers for census tabulation in early 1900’s. In particular, a card sorter that could sort cards into different bins Each column can be punched in 12 places Decimal digits use 10 places Problem: only one column can be sorted on at a time
  • 19. 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 Example: Fig 9.3
  • 20. Radix Sort Can we prove it will work? Sketch of an inductive argument (induction on the number of passes): Assume lower-order digits {j: j<i}are sorted Show that sorting next digit i leaves array correctly sorted If two digits at position i are different, ordering numbers by that digit is correct (lower-order digits irrelevant) If they are the same, numbers are already sorted on the lower-order digits. Since we use a stable sort, the numbers stay in the right order
  • 21. 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 How many bits in a computer word?
  • 22. Radix Sort Problem: sort 1 million 64-bit numbers Treat as four-digit radix 2 16 numbers Can sort in just four passes with radix sort! Compares well with typical O( n lg n ) comparison sort Requires approx lg n = 20 operations per number being sorted So why would we ever use anything but radix sort?
  • 23. Radix Sort In general, radix sort based on counting sort is Fast Asymptotically fast (i.e., O( n )) Simple to code A good choice To think about: Can radix sort be used on floating-point numbers?