# 11. Computer Science Thinking: Recursion, Searching, Sorting and Big O¶

# Objectives¶

- Learn the concept of recursion.
- Write and use recursive functions.
- Determine the base case and recursion step in a recursive algorithm.
- Learn how the system handles recursive function calls.
- Compare recursion and iteration, including when it’s best to use each approach.
- Search for a given value in an array using linear search and binary search.
- Sort arrays using the simple iterative selection and insertion sort algorithms.
- Sort arrays using the more complex but higherperformance recursive merge sort algorithm.
- Use Big O notation to compare the efficiencies of searching and sorting algorithms.
- Use Seaborn and Matplotlib to build an animated selection sort algorithm visualization.

### Outline¶

- 11.1 Introduction
- 11.2 Factorials
- 11.3 Recursive Factorial Example
- 11.4 Recursive Fibonacci Series Example
- 11.5 Recursion vs. Iteration
- 11.6 Searching and Sorting
- 11.7 Linear Search
- 11.8 Efficiency of Algorithms: Big O
- 11.9 Binary Search
  - 11.9.1 Binary Search Implementation
  - 11.9.2 Big O of the Binary Search
- 11.10 Sorting Algorithms
- 11.11 Selection Sort
  - 11.11.1 Selection Sort Implementation
  - 11.11.2 Utility Function print_pass
  - 11.11.3 Big O of the Selection Sort
- 11.12 Insertion Sort
  - 11.12.1 Insertion Sort Implementation
  - 11.12.2 Big O of the Insertion Sort
- 11.13 Merge Sort
  - 11.13.1 Merge Sort Implementation
  - 11.13.2 Big O of the Merge Sort
- 11.14 Big O Summary for This Chapter’s Searching and Sorting Algorithms
- 11.15 Visualizing Algorithms
  - 11.15.1 Generator Functions
  - 11.15.2 Implementing the Selection Sort Animation
- 11.16 Wrap-Up
- Exercises

©1992–2020 by Pearson Education, Inc. All Rights Reserved. This content is based on Chapter 5 of the book Intro to Python for Computer Science and Data Science: Learning to Program with AI, Big Data and the Cloud.

DISCLAIMER: The authors and publisher of this book have used their best efforts in preparing the book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The authors and publisher make no warranty of any kind, expressed or implied, with regard to these programs or to the documentation contained in these books. The authors and publisher shall not be liable in any event for incidental or consequential damages in connection with, or arising out of, the furnishing, performance, or use of these programs.