Insertion Sort & Quick Sort

Insertion Sort & Quick Sort

Department of General and Computational Linguistics Sorting: Insertion Sort & Quick Sort Data Structures and Algorithms for CL III, WS 2019-2020 Corina Dima [email protected] MICHAEL GOODRICH Data Structures & Algorithms in Python ROBERTO TAMASSIA MICHAEL GOLDWASSER 12. Sorting and Selection v Why study sorting algorithms? v Insertion sort (S. 5.5.2) v Quick-sort v Optimizations for quick-sort Sorting: Insertion Sort & Quick Sort | 2 Why Study Sorting Algorithms? • Sorting is among the most important and well studied computing problems • Data is often stored in sorted order, to allow for efficient searching (i.e. with binary search) • Many algorithms rely on sorting as a subroutine • Programming languages have highly optimized, built-in sorting functions – which should be used - Python: sorted(), sort() from the list class - Java: Arrays.sort() Sorting: Insertion Sort & Quick Sort | 3 Why Study Sorting Algorithms? (cont’d) • Understand - what sorting algorithms do - what can be expected in terms of efficiency - how the efficiency of a sorting algorithm can depend on the initial ordering of the data or the type of objects being sorted Sorting: Insertion Sort & Quick Sort | 4 Sorting • Given a collection, rearrange its elements such that they are ordered from smallest to largest – or produce a new copy of the sequence with such an order • We assume that such a consistent order exists • In Python, natural order is typically defined using the < operator, having two properties: - Irreflexive property: " ≮ " - Transitive property: if "% < "& and "& < "' then "% < "' Sorting: Insertion Sort & Quick Sort | 5 Sorting Algorithms • Many different sorting algorithms available - Insertion Sort - Quick-sort - Bucket-sort - Radix-sort - Merge-sort (recap) - Selection Sort - Heap-sort (next lecture) - Timsort (next lecture) Sorting: Insertion Sort & Quick Sort | 6 Insertion Sort Sorting: Insertion Sort & Quick Sort | 7 Insertion Sort • Insertion sort is a simple algorithm for sorting an array • Start with the first element of the array - one element by itself is already sorted • Consider the next element of the array - if smaller than the first, swap them • Consider the third element - Swap it leftward, until it is in proper order with the first two elements • Continue in this manner with the fourth, fifth, etc. until the whole array is sorted Sorting: Insertion Sort & Quick Sort | 8 Insertion Sort - Example B C D A E H G F Sorting: Insertion Sort & Quick Sort | 9 Insertion Sort – Example (cont’d) no move C B C D A E H G F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 10 Insertion Sort – Example (cont’d) no move D B C D A E H G F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 11 Insertion Sort – Example (cont’d) A B C D A E H G F 0 1 2 3 4 5 6 7 move B C D E H G F 0 1 2 3 4 5 6 7 move B C D E H G F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 12 Insertion Sort – Example (cont’d) insert move A B B C D E H G F 0 1 2 3 4 5 6 7 A B C D E H G F Sorting: Insertion Sort & Quick Sort | 13 Insertion Sort – Example (cont’d) no move E A B C D E H G F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 14 Insertion Sort – Example (cont’d) no move H A B C D E H G F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 15 Insertion Sort – Example (cont’d) G A B C D E H G F 0 1 2 3 4 5 6 7 move A B C D E H F 0 1 2 3 4 5 6 7 no move A B C D E H F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 16 Insertion Sort – Example (cont’d) G insert A B C D E H F 0 1 2 3 4 5 6 7 A B C D E G H F 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 17 Insertion Sort – Example (cont’d) F A B C D E G H F 0 1 2 3 4 5 6 7 move A B C D E G H 0 1 2 3 4 5 6 7 move A B C D E G H 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 18 Insertion Sort – Example (cont’d) no move F A B C D E G H 0 1 2 3 4 5 6 7 F insert A B C D E G H 0 1 2 3 4 5 6 7 A B C D E F G H Done! 0 1 2 3 4 5 6 7 Sorting: Insertion Sort & Quick Sort | 19 Insertion Sort – Python code Sorting: Insertion Sort & Quick Sort | 20 Insertion Sort - Complexity • Worst case complexity? - Array in reverse order - Outer loop executes ! − 1 times - Inner loop executes 1 + 2 + … ! – 1 = ? • Best case complexity? - Array is sorted or almost sorted - Outer loop executes ! − 1 times - Inner loop executes few times, or doesn’t execute Sorting: Insertion Sort & Quick Sort | 21 Insertion Sort - Complexity • Worst case complexity: !(#$) - Array in reverse order - Outer loop executes # − 1 times ./0 . - Inner loop executes 1 + 2 + … # – 1 = times $ • Best case complexity: !(#) - Array is sorted or almost sorted - Outer loop executes # − 1 times - Inner loop executes few times, or doesn’t execute Sorting: Insertion Sort & Quick Sort | 22 Quick-Sort Sorting: Insertion Sort & Quick Sort | 23 Divide-and-Conquer • Divide-and conquer is a general algorithm design paradigm: 1. Divide divide the input data ! in two or more disjoint subsets !", !$, … 2. Recur: solve the subproblems recursively 3. Conquer: combine the solutions for !", !$, …, into a solution for ! • The base case for the recursion are subproblems of constant size • Analysis can be done using recurrence equations Sorting: Insertion Sort & Quick Sort | 24 Quick-Sort • Quick-sort is a sorting algorithm based on the divide-and- conquer paradigm; consists of x three steps: - Divide: pick a element ! - called pivot, typically the last element - and partition # into x § $ elements less than ! § % elements equal ! L E G § & elements greater than ! - Recur: sort L and G x - Conquer: join L, E and G Sorting: Insertion Sort & Quick Sort | 25 Quick-Sort Tree • An execution of quick-sort is depicted by a binary tree - Each node represents a recursive call of quick-sort and stores § Unsorted sequence before the execution and its pivot § Sorted sequence at the end of the execution - The root is the initial call - The leaves are calls on subsequences of size 0 or 1 7 4 9 6 2 ® 2 4 6 7 9 4 2 ® 2 4 7 9 ® 7 9 2 ® 2 9 ® 9 Sorting: Insertion Sort & Quick Sort | 26 Execution Example 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 27 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 28 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 29 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 30 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 31 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 32 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 33 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 34 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 35 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 36 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 37 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 38 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 39 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 40 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort & Quick Sort | 41 Execution Example (cont’d) 85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96 24 45 17 31 ® 17 24 31 45 85 63 96 ® 63 85 96 24 17 ® 17 24 45 ® 45 85 63 ® 63 85 2 ® 2 24 ® 24 85 ® 85 Sorting: Insertion Sort

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    96 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us