week 11 sorting algorithms. sorting sorting algorithms a sorting algorithm is an algorithm that puts...

102
Week 11 Sorting Algorithms

Upload: eugenia-pope

Post on 24-Dec-2015

295 views

Category:

Documents


3 download

TRANSCRIPT

Week 11 Sorting Algorithms

Sorting

Sorting Algorithms

• A sorting algorithm is an algorithm that puts elements of a list in a certain order.

• We need sorting algorithm in lots of areas: Science Engineering Business……

Quadratic Sorting Algorithms

• We are given n records to sort. • There are a number of simple sorting

algorithms whose worst and average case performance is quadratic O(n2):– Selection sort– Insertion sort– Bubble sort

Sorting an Array of IntegersSorting an Array of Integers

• Example: we are given an array of six integers that we want to sort from smallest to largest

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Selection sort

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• Start by finding the smallest entry.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• Swap the smallest entry with the first entry.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• Swap the smallest entry with the first entry.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• Part of the array is now sorted.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

Sorted side Unsorted side

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• Find the smallest element in the unsorted side.

Sorted side Unsorted side

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• Swap with the front of the unsorted side.

Sorted side Unsorted side

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• We have increased the size of the sorted side by one element.

Sorted side Unsorted side

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• The process continues...

Sorted side Unsorted side

Smallestfrom

unsorted

Smallestfrom

unsorted

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• The process continues...

Sorted side Unsorted side

[0] [1] [2] [3] [4] [5]

Swap

with

front

Swap

with

front

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• The process continues...

Sorted side Unsorted sideSorted side

is bigger

Sorted sideis bigger

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• The process keeps adding one more number to the sorted side.

• The sorted side has the smallest numbers, arranged from small to large.

Sorted side Unsorted side

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• We can stop when the unsorted side has just one number, since that number must be the largest number. [0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Selection Sort AlgorithmThe Selection Sort Algorithm

• The array is now sorted.

• We repeatedly selected the smallest element, and moved this element to the front of the unsorted side.

[0] [1] [2] [3] [4] [5]

Selection sort

• animation

template <class Item>void selection_sort(Item data[ ], size_t n){ size_t i, j, smallest; Item temp;

if(n < 2) return; // nothing to sort!!

for(i = 0; i < n-1 ; ++i) {

// find smallest in unsorted part of arraysmallest = i;for(j = i+1; j < n; ++j) if(data[smallest] > data[j]) smallest = j;

// put it at front of unsorted part of array (swap)temp = data[i];data[i] = data[smallest];data[smallest] = temp;

}}

Selection Time Sort Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 1 to n-1

find smallest key in unsorted part of array

swap smallest item to front of unsorted array

decrease size of unsorted array by 1

Selection Time Sort Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 1 to n-1 O(n)

find smallest key in unsorted part of array O(n)swap smallest item to front of unsorted arraydecrease size of unsorted array by 1

• Selection sort analysis: O(n2)

template <class Item>void selection_sort(Item data[ ], size_t n){ size_t i, j, smallest; Item temp;

if(n < 2) return; // nothing to sort!!

for(i = 0; i < n-1 ; ++i) {

// find smallest in unsorted part of arraysmallest = i;for(j = i+1; j < n; ++j) if(data[smallest] > data[j]) smallest = j;

// put it at front of unsorted part of array (swap)temp = data[i];data[i] = data[smallest];data[smallest] = temp;

}}

Outer loop:O(n)

template <class Item>void selection_sort(Item data[ ], size_t n){ size_t i, j, smallest; Item temp;

if(n < 2) return; // nothing to sort!!

for(i = 0; i < n-1 ; ++i) {

// find smallest in unsorted part of arraysmallest = i;for(j = i+1; j < n; ++j) if(data[smallest] > data[j]) smallest = j;

// put it at front of unsorted part of array (swap)temp = data[i];data[i] = data[smallest];data[smallest] = temp;

}}

Outer loop:O(n)

Inner loop:O(n)

Insertion sort

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertion Sort AlgorithmThe Insertion Sort Algorithm

• The Insertion Sort algorithm also views the array as having a sorted side and an unsorted side.

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertion Sort AlgorithmThe Insertion Sort Algorithm

• The sorted side starts with just the first element, which is not necessarily the smallest element.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertion Sort AlgorithmThe Insertion Sort Algorithm

• The sorted side grows by taking the front element from the unsorted side...

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertion Sort AlgorithmThe Insertion Sort Algorithm

• ...and inserting it in the place that keeps the sorted side arranged from small to large.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertion Sort AlgorithmThe Insertion Sort Algorithm

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertion Sort AlgorithmThe Insertion Sort Algorithm

• Sometimes we are lucky and the new inserted item doesn't need to move at all.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Insertionsort AlgorithmThe Insertionsort Algorithm

• Sometimes we are lucky twice in a row.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

Copy the new element to a separate location.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

[0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

Shift elements in the sorted side, creating an open space for the new element.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

[0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

Shift elements in the sorted side, creating an open space for the new element.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

Continue shifting elements...

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

Continue shifting elements...

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

...until you reach the location for the new element.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5]

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

Copy the new element back into the array, at the correct location.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

[0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

How to Insert One ElementHow to Insert One Element

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

• The last element must also be inserted. Start by copying it...

[0] [1] [2] [3] [4] [5]

Sorted side Unsorted side

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

Sorted ResultSorted Result

[0] [1] [2] [3] [4] [5]

Insertion Sort

• animation

template <class Item>void insertion_sort(Item data[ ], size_t n){ size_t i, j; Item temp;

if(n < 2) return; // nothing to sort!!

for(i = 1; i < n; ++i) {

// take next item at front of unsorted part of array // and insert it in appropriate location in sorted part of arraytemp = data[i];for(j = i; data[j-1] > temp and j > 0; --j)

data[j] = data[j-1]; // shift element forward

data[j] = temp; }}

Insertion Sort Time Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 1 to n-1

take next key from unsorted part of array

insert in appropriate location in sorted part of array:

for j = i down to 0,

shift sorted elements to the right if key > key[i]

increase size of sorted array by 1

Insertion Sort Time Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 1 to n-1

take next key from unsorted part of array

insert in appropriate location in sorted part of array:

for j = i down to 0,

shift sorted elements to the right if key > key[i]

increase size of sorted array by 1

Outer loop:O(n)

Insertion Sort Time Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 1 to n-1

take next key from unsorted part of array

insert in appropriate location in sorted part of array:

for j = i down to 0,

shift sorted elements to the right if key > key[i]

increase size of sorted array by 1

Outer loop:O(n)

Inner loop:O(n)

template <class Item>void insertion_sort(Item data[ ], size_t n){ size_t i, j; Item temp;

if(n < 2) return; // nothing to sort!!

for(i = 1; i < n; ++i) {

// take next item at front of unsorted part of array // and insert it in appropriate location in sorted part of arraytemp = data[i];for(j = i; data[j-1] > temp and j > 0; --j)

data[j] = data[j-1]; // shift element forward

data[j] = temp; }}

O(n)

O(n)

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Bubble sort

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed.

[0] [1] [2] [3] [4] [5] Swap?

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Yes!

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Swap?

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Swap?

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Swap?

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Yes!

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Swap?

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• The Bubble Sort algorithm looks at pairs of entries in the array, and swaps their order if needed. [0] [1] [2] [3] [4] [5]

Yes!

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Repeat.

[0] [1] [2] [3] [4] [5] Swap? No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? Yes.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Loop over array n-1 times, swapping pairs of entries as needed.

[0] [1] [2] [3] [4] [5] Swap? No.

0

10

20

30

40

50

60

70

[1] [2] [3] [4] [5] [6]

The Bubble Sort AlgorithmThe Bubble Sort Algorithm

• Continue looping, until done.

[0] [1] [2] [3] [4] [5] Swap? Yes.

Bubble sort

• animation

template <class Item>void bubble_sort(Item data[ ], size_t n){ size_t i, j; Item temp;

if(n < 2) return; // nothing to sort!!

for(i = 0; i < n-1; ++i) {

for(j = 0; j < n-1;++j) if(data[j] > data[j+1]) // if out of order, swap!

{ temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; }

}}

template <class Item>void bubble_sort(Item data[ ], size_t n){ size_t i, j; Item temp; bool swapped = true;

if(n < 2) return; // nothing to sort!! for(i = 0; swapped and i < n-1; ++i) { // if no elements swapped in an iteration,

// then elements are in order: done!for(swapped = false, j = 0; j < n-1;++j)

if(data[j] > data[j+1]) // if out of order, swap! { temp = data[j]; data[j] = data[j+1]; data[j+1] = temp;

swapped = true; }

}}

Bubble Sort Time Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 0 to n-1

for j =0 to n-2

if key[j] > key[j+1] then swap

if no elements swapped in this pass through array, done.

otherwise, continue

Bubble Sort Time Analysis

• In O-notation, what is:– Worst case running time for n items?– Average case running time for n items?

• Steps of algorithm:for i = 0 to n-1

for j =0 to n-2

if key[j] > key[j+1] then swap

if no elements swapped in this pass through array, done.

otherwise, continue

O(n)O(n)

• Selection Sort, Insertion Sort, and Bubble Sort all have a worst-case time of O(n2), making them impractical for large arrays.

• But they are easy to understand, easy to program, easy to debug.

• Insertion Sort also has good performance when the array is nearly sorted to begin with.

Timing and Other Issues Timing and Other Issues

Next class

• More sophisticated sorting algorithms are needed when good performance is needed in all cases for large arrays.

• Next class: Merge Sort, Heap Sort. – O(N log N)

• Review the “recursion algorithm” and “heap structure” we discussed last week.

Merge sort

Merge sort

1. Partitioning: Divide the unsorted list into n sublists, each containing 1 element (a list of 1 element is considered sorted).

2. Merging: Recursively merge sublists to produce new sorted sublists until there is only 1 sublist remaining. This will be the sorted list.

Recursion

86

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

87

0

0

0

Main IndexMain Index ContentsContents88

The Merge Algorithm Example

7 1 0 1 9 2 5 1 2 1 7 2 1 3 0 4 8

s u b lis t Bs u b lis t A

firs t las tm id

The merge algorithm takes a sequence of elements in a vector v having index range [first, last). The sequence consists of two ordered sublists separated by an intermediate index, called mid.

Main IndexMain Index ContentsContents8989 Main IndexMain Index ContentsContents

The Merge Algorithm… (Cont…)

7 1 0 1 9 2 5 1 2 1 7 2 1 3 0 4 8

7

s u b lis t Bs u b lis t A

in d exA in d exB

t em p Vect o r

7 1 0

t em p Vect o r

7 1 0 1 9 2 5 1 2 1 7 2 1 3 0 4 8

s u b lis t Bs u b lis t A

in d exA in d exrB

Main IndexMain Index ContentsContents9090 Main IndexMain Index ContentsContents

The Merge Algorithm… (Cont…)

7 1 0 1 9 2 5 1 2 1 7 2 1 3 0 4 8

7 1 0 1 2

s u b lis t Bs u b lis t A

in d exA in d exB

t em p Vect o r

7 1 0 1 9 2 5 1 2 1 7 2 1 3 0 4 8

7 1 0 1 2 1 7 1 9 2 1 2 5

s u b lis t Bs u b lis t A

in d exA in d exB

t em p Vect o r

Main IndexMain Index ContentsContents91

The Merge Algorithm… (Cont…)

7 1 0 1 9 2 5 1 2 1 7 2 1 3 0 4 8

7 1 0 1 2 1 7 1 9 2 1 2 5 3 0 4 8

s u b lis t Bs u b lis t A

in d exA in d exB

t em p Vect o r

las t

7 10 12 17 19 21 25 30 48

t e m p Ve c t o r

7 10 12 17 19 21 25 30 48

firs t la s t

Merge sort

• animation

mergeSort()

Main IndexMain Index ContentsContents9494 Main IndexMain Index ContentsContents

Partitioning and Merging of Sublists in mergeSort()

(25 10 7 19 3 48 12 17 56 30 21)

(25 10 7 19 3 )

(7 19 3 )(25 10 )

[3 7 10 19 25]

(48 12 17 56 30 21 )

(56 30 21 )(48 12 17 )

[12 17 21 30 48 56]

[3 7 10 12 17 19 21 25 30 48 56]

(10 )

[10 25]

(25 ) (19 3 )(7 )

[3 7 19]

(56 )

[21 30 56]

(12 17 )(48 )

[12 17 48]

(21 )(3 )

[3 19]

(19 )

(30 21 )

[21 30]

(30 )(17 )

[12 17]

(12 )

Complexity of merge sort

Complexity of merge sort

Worst, best, average caseComplexity: O(n log n)

Heap sort

Heaps• For a maximum heap, the value of a parent is greater than or

equal to the value of each of its children. • For a minimum heap, the value of the parent is less than or

equal to the value of each of its children.• We assume that a heap is a maximum heap.

Heap sort

1. Build a heap of N elements – the maximum element is at the top of the heap

2. Perform N Delete operations– the elements are extracted in sorted order

Heap sort

• animation

Heap sort – Running Time Analysis

1. Build a binary heap of N elements O(N), see slide 21 of lecture ‘heap’

2. Perform N Delete operations– Each Delete operation takes O(log N), See slide 23 of lecture ‘heap’

Total: O(N log N)

Total time complexity: O(N) + O(N log N) O(N log N)

Reading

• Chapter 7