5. sorting - lec.inf.ethz.ch · selection sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5...

104
5. Sorting Simple Sorting, Quicksort, Mergesort 98

Upload: others

Post on 27-Sep-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

5. Sorting

Simple Sorting, Quicksort, Mergesort

98

Page 2: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Problem

Input: An array A = (A[1], ..., A[n]) with length n.

Output: a permutation A′ of A, that is sorted: A′[i] ≤ A′[j] for all1 ≤ i ≤ j ≤ n.

99

Page 3: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.

Selection of thesmallest (or largest)element byimmediate search.

100

Page 4: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 5: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 6: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 7: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 8: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 9: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 10: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 11: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 12: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 13: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 14: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 15: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Selection Sort

5 6 2 8 4 1 (i = 1)

1 6 2 8 4 5 (i = 2)

1 2 6 8 4 5 (i = 3)

1 2 4 8 6 5 (i = 4)

1 2 4 5 6 8 (i = 5)

1 2 4 5 6 8 (i = 6)

1 2 4 5 6 8

Iterative procedureas for Bubblesort.Selection of thesmallest (or largest)element byimmediate search.

100

Page 16: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm: Selection Sort

Input : Array A = (A[1], . . . , A[n]), n ≥ 0.Output : Sorted Array Afor i← 1 to n− 1 do

p← ifor j ← i + 1 to n do

if A[j] < A[p] thenp← j;

swap(A[i], A[p])

101

Page 17: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in worst case:

Θ(n2).

Number swaps in the worst case: n− 1 = Θ(n)

Best case number comparisons: Θ(n2).

102

Page 18: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in worst case: Θ(n2).

Number swaps in the worst case:

n− 1 = Θ(n)

Best case number comparisons: Θ(n2).

102

Page 19: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in worst case: Θ(n2).

Number swaps in the worst case: n− 1 = Θ(n)

Best case number comparisons:

Θ(n2).

102

Page 20: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in worst case: Θ(n2).

Number swaps in the worst case: n− 1 = Θ(n)

Best case number comparisons: Θ(n2).

102

Page 21: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i

arrayblock movementpotentially required

103

Page 22: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i

arrayblock movementpotentially required

103

Page 23: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.

Insert element i

arrayblock movementpotentially required

103

Page 24: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i

arrayblock movementpotentially required

103

Page 25: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i

arrayblock movementpotentially required

103

Page 26: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i

arrayblock movementpotentially required

103

Page 27: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 28: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 29: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 30: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 31: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 32: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 33: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

5 6 2 8 4 1 (i = 1)

5 6 2 8 4 1 (i = 2)

5 6 2 8 4 1 (i = 3)

2 5 6 8 4 1 (i = 4)

2 5 6 8 4 1 (i = 5)

2 4 5 6 8 1 (i = 6)

1 2 4 5 6 8

Iterative procedure:i = 1...n

Determine insertionposition for element i.Insert element i arrayblock movementpotentially required

103

Page 34: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

? What is the disadvantage of this algorithm compared to sortingby selection?

! Many element movements in the worst case.

? What is the advantage of this algorithm compared to selectionsort?! The search domain (insertion interval) is already sorted.

Consequently: binary search possible.

104

Page 35: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

? What is the disadvantage of this algorithm compared to sortingby selection?

! Many element movements in the worst case.

? What is the advantage of this algorithm compared to selectionsort?

! The search domain (insertion interval) is already sorted.Consequently: binary search possible.

104

Page 36: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Insertion Sort

? What is the disadvantage of this algorithm compared to sortingby selection?

! Many element movements in the worst case.

? What is the advantage of this algorithm compared to selectionsort?! The search domain (insertion interval) is already sorted.

Consequently: binary search possible.

104

Page 37: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm: Insertion Sort

Input : Array A = (A[1], . . . , A[n]), n ≥ 0.Output : Sorted Array Afor i← 2 to n do

x← A[i]p← BinarySearch(A[1...i− 1], x); // Smallest p ∈ [1, i] with A[p] ≥ xfor j ← i− 1 downto p do

A[j + 1]← A[j]

A[p]← x

105

Page 38: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in the worst case:

∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).

Number comparisons in the best case Θ(n log n).3

Number swaps in the worst case∑n

k=2(k − 1) ∈ Θ(n2)

3With slight modification of the function BinarySearch for the minimum / maximum: Θ(n)106

Page 39: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in the worst case:∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).

Number comparisons in the best case

Θ(n log n).3

Number swaps in the worst case∑n

k=2(k − 1) ∈ Θ(n2)

3With slight modification of the function BinarySearch for the minimum / maximum: Θ(n)106

Page 40: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in the worst case:∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).

Number comparisons in the best case Θ(n log n).3

Number swaps in the worst case

∑nk=2(k − 1) ∈ Θ(n2)

3With slight modification of the function BinarySearch for the minimum / maximum: Θ(n)106

Page 41: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Number comparisons in the worst case:∑n−1k=1 a · log k = a log((n− 1)!) ∈ O(n log n).

Number comparisons in the best case Θ(n log n).3

Number swaps in the worst case∑n

k=2(k − 1) ∈ Θ(n2)

3With slight modification of the function BinarySearch for the minimum / maximum: Θ(n)106

Page 42: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

5.1 Quicksort

[Ottman/Widmayer, Kap. 2.2, Cormen et al, Kap. 7]

107

Page 43: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 44: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 45: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 46: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 47: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 48: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 49: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 50: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 51: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 52: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Quicksort (arbitrary pivot)

2 4 5 6 8 3 7 9 1

2 1 3 6 8 5 7 9 4

1 2 3 4 5 8 7 9 6

1 2 3 4 5 6 7 9 8

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

108

Page 53: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm Quicksort(A[l, . . . , r]

Input : Array A with length n. 1 ≤ l ≤ r ≤ n.Output : Array A, sorted between l and r.if l < r then

Choose pivot p ∈ A[l, . . . , r]k ← Partition(A[l, . . . , r], p)Quicksort(A[l, . . . , k − 1])Quicksort(A[k + 1, . . . , r])

109

Page 54: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis: number comparisons

Best case.

Pivot = median; number comparisons:

T (n) = 2T (n/2) + c · n, T (1) = 0 ⇒ T (n) ∈ O(n log n)

Worst case. Pivot = min or max; number comparisons:

T (n) = T (n− 1) + c · n, T (1) = 0 ⇒ T (n) ∈ Θ(n2)

110

Page 55: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis: number comparisons

Best case. Pivot = median; number comparisons:

T (n) = 2T (n/2) + c · n, T (1) = 0 ⇒ T (n) ∈ O(n log n)

Worst case.

Pivot = min or max; number comparisons:

T (n) = T (n− 1) + c · n, T (1) = 0 ⇒ T (n) ∈ Θ(n2)

110

Page 56: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis: number comparisons

Best case. Pivot = median; number comparisons:

T (n) = 2T (n/2) + c · n, T (1) = 0 ⇒ T (n) ∈ O(n log n)

Worst case. Pivot = min or max; number comparisons:

T (n) = T (n− 1) + c · n, T (1) = 0 ⇒ T (n) ∈ Θ(n2)

110

Page 57: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis (randomized quicksort)

TheoremOn average randomized quicksort requires O(n · log n) comparisons.

111

Page 58: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Practical considerations

Worst case recursion depth n− 14. Then also a memoryconsumption of O(n).

Can be avoided: recursion only on the smaller part. Thenguaranteed O(log n) worst case recursion depth and memoryconsumption.

4stack overflow possible!112

Page 59: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Practical considerations.

Practically the pivot is often the median of three elements. Forexample: Median3(A[l], A[r], A[bl + r/2c]).

113

Page 60: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

5.2 Mergesort

[Ottman/Widmayer, Kap. 2.4, Cormen et al, Kap. 2.3],

114

Page 61: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

Divide and Conquer!

Assumption: two halves of the array A are already sorted.Minimum of A can be evaluated with two comparisons.Iteratively: sort the pre-sorted array A in O(n).

115

Page 62: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 63: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 64: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 65: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 66: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 67: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 68: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 69: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 70: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 71: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 72: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Merge

1 4 7 9 16 2 3 10 11 12

1 2 3 4 7 9 10 11 12 16

116

Page 73: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm Merge(A, l,m, r)

Input : Array A with length n, indexes 1 ≤ l ≤ m ≤ r ≤ n. A[l, . . . ,m],A[m + 1, . . . , r] sorted

Output : A[l, . . . , r] sorted1 B ← new Array(r − l + 1)2 i← l; j ← m + 1; k ← 13 while i ≤ m and j ≤ r do4 if A[i] ≤ A[j] then B[k]← A[i]; i← i + 15 else B[k]← A[j]; j ← j + 16 k ← k + 1;

7 while i ≤ m do B[k]← A[i]; i← i + 1; k ← k + 18 while j ≤ r do B[k]← A[j]; j ← j + 1; k ← k + 19 for k ← l to r do A[k]← B[k − l + 1]

117

Page 74: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

CorrectnessHypothesis: after k iterations of the loop in line 3 B[1, . . . , k] issorted and B[k] ≤ A[i], if i ≤ m and B[k] ≤ A[j] if j ≤ r.

Proof by induction:Base case: the empty array B[1, . . . , 0] is trivially sorted.Induction step (k → k + 1):

wlog A[i] ≤ A[j], i ≤ m, j ≤ r.

B[1, . . . , k] is sorted by hypothesis and B[k] ≤ A[i].

After B[k + 1]← A[i] B[1, . . . , k + 1] is sorted.

B[k + 1] = A[i] ≤ A[i + 1] (if i + 1 ≤ m) and B[k + 1] ≤ A[j] if j ≤ r.

k ← k + 1, i← i + 1: Statement holds again.

118

Page 75: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis (Merge)

LemmaIf: array A with length n, indexes 1 ≤ l < r ≤ n. m = b(l + r)/2cand A[l, . . . ,m], A[m + 1, . . . , r] sorted.Then: in the call of Merge(A, l,m, r) a number of Θ(r − l) keymovements and comparisons are executed.

Proof: straightforward(Inspect the algorithm and count theoperations.)

119

Page 76: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9

Split5 2 6 1 8 4 3 9

Split5 2 6 1 8 4 3 9

Split5 2 6 1 8 4 3 9

Merge2 5 1 6 4 8 3 9

Merge1 2 5 6 3 4 8 9

Merge1 2 3 4 5 6 8 9

120

Page 77: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 78: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9

Split5 2 6 1 8 4 3 9

Split5 2 6 1 8 4 3 9

Merge2 5 1 6 4 8 3 9

Merge1 2 5 6 3 4 8 9

Merge1 2 3 4 5 6 8 9

120

Page 79: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 80: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9

Split5 2 6 1 8 4 3 9

Merge2 5 1 6 4 8 3 9

Merge1 2 5 6 3 4 8 9

Merge1 2 3 4 5 6 8 9

120

Page 81: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 82: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9

Merge2 5 1 6 4 8 3 9

Merge1 2 5 6 3 4 8 9

Merge1 2 3 4 5 6 8 9

120

Page 83: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 84: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9

Merge1 2 5 6 3 4 8 9

Merge1 2 3 4 5 6 8 9

120

Page 85: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 86: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9

Merge1 2 3 4 5 6 8 9

120

Page 87: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 88: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Mergesort

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Split

5 2 6 1 8 4 3 9Merge

2 5 1 6 4 8 3 9Merge

1 2 5 6 3 4 8 9Merge

1 2 3 4 5 6 8 9

120

Page 89: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm recursive 2-way Mergesort(A, l, r)

Input : Array A with length n. 1 ≤ l ≤ r ≤ nOutput : Array A[l, . . . , r] sorted.if l < r then

m← b(l + r)/2c // middle positionMergesort(A, l,m) // sort lower halfMergesort(A,m + 1, r) // sort higher halfMerge(A, l,m, r) // Merge subsequences

121

Page 90: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Recursion equation for the number of comparisons and keymovements:

C(n) = C(⌈n

2

⌉) + C(

⌊n2

⌋) + Θ(n)

∈ Θ(n log n)

122

Page 91: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Recursion equation for the number of comparisons and keymovements:

C(n) = C(⌈n

2

⌉) + C(

⌊n2

⌋) + Θ(n) ∈ Θ(n log n)

122

Page 92: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm StraightMergesort(A)

Avoid recursion: merge sequences of length 1, 2, 4, ... directlyInput : Array A with length nOutput : Array A sortedlength ← 1while length < n do // Iterate over lengths n

r ← 0while r + length < n do // Iterate over subsequences

l ← r + 1m ← l + length − 1r ← min(m + length, n)Merge(A, l ,m, r)

length ← length · 2

123

Page 93: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

Like the recursive variant, the straight 2-way mergesort alwaysexecutes a number of Θ(n log n) key comparisons and keymovements.

124

Page 94: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

Observation: the variants above do not make use of any presortingand always execute Θ(n log n) memory movements.

? How can partially presorted arrays be sorted better?

! Recursive merging of previously sorted parts (runs) of A.

125

Page 95: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

Observation: the variants above do not make use of any presortingand always execute Θ(n log n) memory movements.

? How can partially presorted arrays be sorted better?

! Recursive merging of previously sorted parts (runs) of A.

125

Page 96: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9

126

Page 97: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9

126

Page 98: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9

126

Page 99: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9

126

Page 100: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9

126

Page 101: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9

126

Page 102: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Natural 2-way mergesort

5 6 2 4 8 3 9 7 1

2 4 5 6 8 3 7 9 1

2 3 4 5 6 7 8 9 1

1 2 3 4 5 6 7 8 9126

Page 103: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Algorithm NaturalMergesort(A)

Input : Array A with length n > 0Output : Array A sortedrepeat

r ← 0while r < n do

l ← r + 1m ← l ; while m < n and A[m + 1] ≥ A[m] do m ← m + 1if m < n then

r ← m + 1; while r < n and A[r + 1] ≥ A[r ] do r ← r + 1Merge(A, l ,m, r);

elser ← n

until l = 1

127

Page 104: 5. Sorting - lec.inf.ethz.ch · Selection Sort 5 6 2 8 4 1 (i = 1) 1 6 2 8 4 5 (i = 2) 1 2 6 8 4 5 (i = 3) 1 2 4 8 6 5 (i = 4) 1 2 4 5 6 8 (i = 5) 1 2 4 5 6 8 (i = 6) 1 2 4 5 6 8

Analysis

In the best case, natural merge sort requires only n− 1comparisons.

In the worst case and on average, natural merge sort requiresΘ(n log n) comparisons and memory movements.

128