Sorting: Insertion Sort& Quick Sort · 2020. 1. 29. · Sorting: Insertion Sort & Quick Sort | 2...

96
Corina Dima [email protected] Department of General and Computational Linguistics Data Structures and Algorithms for CL III, WS 2019-2020 Sorting: Insertion Sort & Quick Sort

Transcript of Sorting: Insertion Sort& Quick Sort · 2020. 1. 29. · Sorting: Insertion Sort & Quick Sort | 2...

  • Corina [email protected]

    Department of General and Computational Linguistics

    Data Structures and Algorithms for CL III, WS 2019-2020

    Sorting: Insertion Sort & Quick Sort

  • Sorting: Insertion Sort & Quick Sort | 2

    12. Sorting and Selection

    v Why study sorting algorithms?

    v Insertion sort (S. 5.5.2)v Quick-sortv Optimizations for quick-sort

    Data Structures & Algorithms in PythonMICHAEL GOODRICHROBERTO TAMASSIA

    MICHAEL GOLDWASSER

  • 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

    Sorting: Insertion Sort & Quick Sort | 9

    B C D A E H G F

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 10

    B C D A E H G FC

    no move

    0 1 2 3 4 5 6 7

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 11

    B C D A E H G FD

    no move

    0 1 2 3 4 5 6 7

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 12

    B C D E H G F

    A

    move

    0 1 2 3 4 5 6 7

    B C D E H G F

    move

    0 1 2 3 4 5 6 7

    B C D A E H G F

    0 1 2 3 4 5 6 7

  • B

    Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 13

    A B C D E H G F

    move

    0 1 2 3 4 5 6 7

    insert

    A B C D E H G F

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 14

    A B C D E H G FE

    no move

    0 1 2 3 4 5 6 7

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 15

    A B C D E H G FH

    no move

    0 1 2 3 4 5 6 7

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 16

    A B C D E H G FG

    0 1 2 3 4 5 6 7

    A B C D E H F

    move

    0 1 2 3 4 5 6 7

    A B C D E H F

    0 1 2 3 4 5 6 7

    no move

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 17

    G

    A B C D E H F

    0 1 2 3 4 5 6 7

    insert

    A B C D E G H F

    0 1 2 3 4 5 6 7

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 18

    A B C D E G H FF

    0 1 2 3 4 5 6 7

    A B C D E G H

    move

    0 1 2 3 4 5 6 7

    A B C D E G H

    0 1 2 3 4 5 6 7

    move

  • Insertion Sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 19

    F A B C D E G H

    0 1 2 3 4 5 6 7

    no move

    F

    A B C D E G H

    0 1 2 3 4 5 6 7

    insert

    A B C D E F G H

    0 1 2 3 4 5 6 7

    Done!

  • Insertion Sort – Python code

    Sorting: Insertion Sort & Quick Sort | 20

  • Insertion Sort - Complexity

    • Worst case complexity?

    - Array in reverse order- Outer loop executes ! − 1times- 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 # − 1times- Inner loop executes 1 + 2 +… #– 1 = ./0 .$ 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 recursively3. 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 three steps:

    - Divide: pick a element ! -called pivot, typically the last element - and partition # into § $ elements less than !§ % elements equal !§ & elements greater than !

    - Recur: sort L and G

    - Conquer: join L, E and G

    Sorting: Insertion Sort & Quick Sort | 25

    x

    x

    L GE

    x

  • 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

    Sorting: Insertion Sort & Quick Sort | 26

    7 4 9 6 2 ® 2 4 6 7 9

    4 2 ® 2 4 7 9 ® 7 9

    2 ® 2 9 ® 9

  • Execution Example

    Sorting: Insertion Sort & Quick Sort | 27

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 28

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 29

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 30

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 31

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 32

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 33

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 34

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 35

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 36

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 37

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 38

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 39

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 40

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 41

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • Execution Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 42

    24 45 17 31 ® 17 24 31 45

    45 ® 45

    85 24 63 45 17 31 96 50 ® 17 24 31 45 50 63 85 96

    24 17 ® 17 24

    24 ® 24

    85 63 96 ® 63 85 96

    2 ® 285 63 ® 63 85

    85 ® 85

  • In-place Quick-Sort

    • An algorithm is in-place if it uses only a small amount of memory in addition to that needed for the original input

    • If we use additional containers !, # and $, as described before, then quick-sort is not in place

    • But the algorithm can be modified to run in-place, by using the input sequence to store the subsequences for all the recursive calls

    • The input sequence is modified during quick sort using element swapping, without ever explicitly creating subsequences

    • The subsequence is implicitly specified by a leftmost index, %, and a rightmost index, &

    Sorting: Insertion Sort & Quick Sort | 43

  • In-place Quick-Sort (cont’d)

    Sorting: Insertion Sort & Quick Sort | 44

  • In-place Quick-sort - Example

    Sorting: Insertion Sort & Quick Sort | 45

    85 24 63 45 17 31 96 50

    left right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 46

    85 24 63 45 17 31 96 50

    left right85 > 50 Stop! 96 > 50 Left

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 47

    85 24 63 45 17 31 96 50

    left right85 > 50 Stop! 31 < 50 Stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 48

    85 24 63 45 17 31 96 50

    left right85 > 50 Stop! 31 < 50 Stop!

    swap

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 49

    31 24 63 45 17 85 96 50

    left right24 < 50 right 31 < 50 Stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 50

    31 24 63 45 17 85 96 50

    left right63 > 50 Stop! 17 < 50 Stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 51

    31 24 63 45 17 85 96 50

    left right63 > 50 Stop! 17 < 50 Stop!

    swap

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 52

    31 24 17 45 63 85 96 50

    leftright45 < 50 right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 53

    31 24 17 45 63 85 96 50

    leftrightleft > right Stop!

    swap

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 54

    31 24 17 45 50 85 96 63

    leftright

    recur first on the left subsequence, up to the pivot

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 55

    31 24 17 45 50 85 96 63

    left right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 56

    31 24 17 45 50 85 96 63

    left right31 < 45 right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 57

    31 24 17 45 50 85 96 63

    left right24 < 45 right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 58

    31 24 17 45 50 85 96 63

    leftright17 < 45 right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 59

    31 24 17 45 50 85 96 63

    leftright

    left > right

    • pivot already in place• recur first on the left subsequence, up to the pivot

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 60

    31 24 17 45 50 85 96 63

    left right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 61

    31 24 17 45 50 85 96 63

    left right

    31 > 17 Stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 62

    31 24 17 45 50 85 96 63

    left right

    31 > 17 Stop! 24 > 17 left

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 63

    31 24 17 45 50 85 96 63

    left right

    31 > 17 Stop! 31 > 17 left

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 64

    31 24 17 45 50 85 96 63

    leftright

    31 > 17 Stop! left > right Stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 65

    31 24 17 45 50 85 96 63

    leftright

    31 > 17 Stop! left > right Stop!

    swap

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 66

    17 24 31 45 50 85 96 63

    leftright

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 67

    17 24 31 45 50 85 96 63

    left right

    • pivot 17• left subsequence empty• recur on the right subsequence

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 68

    17 24 31 45 50 85 96 63

    left right

    • recur on the right subsequence• pivot 31

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 69

    17 24 31 45 50 85 96 63

    left right

    24 < 31 move left

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 70

    17 24 31 45 50 85 96 63

    leftright

    left > right Stop!

    • pivot already in the correct position, no need to swap

    • recur on left subsequence

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 71

    17 24 31 45 50 85 96 63

    left right

    • one element (24), trivially sorted• right subsequence empty, return

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 72

    17 24 31 45 50 85 96 63

    left right

    • finished recurring on the left, pivot is 45, right subsequence empty - return

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 73

    17 24 31 45 50 85 96 63

    • return to top call with pivot 50• recur on the right sequence

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 74

    17 24 31 45 50 85 96 63

    left right

    85 > 63 stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 75

    17 24 31 45 50 85 96 63

    left right

    85 > 63 stop! 63 < 96 left

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 76

    17 24 31 45 50 85 96 63

    left right

    85 > 63 stop! 63 < 85 left

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 77

    17 24 31 45 50 85 96 63

    leftright

    85 > 63 stop! left > right Stop!

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 78

    17 24 31 45 50 85 96 63

    leftright

    85 > 63 stop! left > right Stop!

    swap

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 79

    17 24 31 45 50 63 96 85

    leftright

    • left subsequence empty, recur on the right subsequence

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 80

    17 24 31 45 50 63 96 85

    96 > 85 Stop!left > right Stop!

    left right

  • 17 24 31 45 50

    In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 81

    63 96 85

    96 > 85 Stop! 96 < 85 left

    left right

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 82

    17 24 31

    96 > 85 Stop!left > right Stop!

    leftright

    45 50 63 96 85

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 83

    17 24 31

    96 > 85 Stop!left > right Stop!

    leftright

    swap

    45 50 63 96 85

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 84

    17 24 31

    96 > 85 Stop!left > right Stop!

    leftright

    45 50 63 85 96

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 85

    17 24 31

    • pivot 85 • left subsequence empty• recur on the right subsequence, trivial, one element

    45 50 63 85 96

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 86

    17 24 31

    • pivot 85 • left subsequence empty• recur on the right subsequence, trivial, one element

    45 50 63 85 96

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 87

    17 24 31

    • return to pivot 63

    45 50 63 85 96

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 88

    17 24 31

    • end recursion on the right subsequence

    45 50 63 85 96

  • In-place Quick-sort – Example (cont’d)

    Sorting: Insertion Sort & Quick Sort | 89

    17 24 31 45 50 63 85 96

    • end recursion on the full sequence

  • Worst-case Running Time

    • Worst-case behavior occurs when sorting should be easy – when the sequence is already sorted

    • The worst case for quick-sort occurs when the pivot is the unique maximum or minimum element

    • One of ! or " has size # − 1, the other has size 0• The running time is proportional to the sum

    # + # − 1 +…+ 2 + 1 = # # + 12

    Sorting: Insertion Sort & Quick Sort | 90

  • Worst-case Running Time (cont’d)

    • Thus the worst-case running time of quick-sort is !(#$)• The overall running time is ! # & ℎ , where ℎ is the overall height of

    the quicksort tree

    Sorting: Insertion Sort & Quick Sort | 91

    depth time0 n

    1 n - 1

    … …

    n - 1 1

  • Running Time of Quick Sort

    • " #$ worst-case behavior – why is quick-sort so slow?• Actually, it is quick, in practice:

    - The best case for quick-sort is when subsequences % and &have roughly the same size

    - By introducing randomization in the choice of the pivot, quick-sort can have an expected running time of "(# log #)

    Sorting: Insertion Sort & Quick Sort | 92

  • Randomized Quick-Sort

    • Instead of picking the pivot as the last element of the sequence, use a random element as the pivot

    • Some heuristics for pivot selection

    - Pick a random element of the array- Median-of-three: take the median of three values chosen from

    the front, middle or tail of the array• In this case the height of the quick-sort tree is log $, and the overall

    running time is %($ log $)

    Sorting: Insertion Sort & Quick Sort | 93

  • Randomized Quick-Sort – !(#%&'#)

    • Why? If the pivot is well-chosen, it splits the input sequence in approx. half

    • E.g. 128 elements in the sequence:- Partition 1: 64 elements- Partition 2: 32 elements- Partition 3: 16 elements- Partition 4: 8 elements- Partition 5: 4 elements- Partition 6: 2 elements- Partition 7: 1 element

    • 7 levels of partitioning: log, 128 = 7• Each of the 7 (log 2) partitioning

    levels visits all 128 (2) inputs

    Sorting: Insertion Sort & Quick Sort | 94

  • Summary

    Algorithm Time Notesinsertion sort !(#$) • in-place

    • slow, but good for small inputs

    quick sort !(# log #) • in-place, randomized

    • fastest, good for large inputs

    Sorting: Insertion Sort & Quick Sort | 95

  • Thank you.