54
Class No.39 Data Structures http://ecomputernotes. com

Computer notes - Mergesort

Embed Size (px)

DESCRIPTION

Mergesort is a divide and conquer algorithm that does exactly that. It splits the list in half Mergesorts the two halves Then merges the two sorted halves together Mergesort can be implemented recursively

Citation preview

Page 1: Computer notes - Mergesort

Class No.39

Data Structures

http://ecomputernotes.com

Page 2: Computer notes - Mergesort

Divide and Conquer

What if we split the list into two parts?

10 12 8 4 2 11 7 510 12 8 4 2 11 7 5

http://ecomputernotes.com

Page 3: Computer notes - Mergesort

Divide and Conquer

Sort the two parts:

10 12 8 4 2 11 7 54 8 10 12 2 5 7 11

http://ecomputernotes.com

Page 4: Computer notes - Mergesort

Divide and Conquer

Then merge the two parts together:

4 8 10 12 2 5 7 112 4 5 7 8 10 11 12

http://ecomputernotes.com

Page 5: Computer notes - Mergesort

Analysis

To sort the halves (n/2)2+(n/2)2

To merge the two halves n So, for n=100, divide and conquer

takes:= (100/2)2 + (100/2)2 + 100= 2500 + 2500 + 100 = 5100 (n2 = 10,000)

http://ecomputernotes.com

Page 6: Computer notes - Mergesort

Divide and Conquer

Why not divide the halves in half? The quarters in half? And so on . . . When should we stop?

At n = 1

http://ecomputernotes.com

Page 7: Computer notes - Mergesort

SearchSearch

Divide and Conquer

SearchSearch

SearchSearch

Recall: Binary Search

http://ecomputernotes.com

Page 8: Computer notes - Mergesort

SortSort

Divide and Conquer

SortSort SortSort

SortSort SortSort SortSort SortSort

http://ecomputernotes.com

Page 9: Computer notes - Mergesort

Divide and Conquer

CombineCombine

CombineCombine CombineCombine

http://ecomputernotes.com

Page 10: Computer notes - Mergesort

Mergesort

Mergesort is a divide and conquer algorithm that does exactly that.

It splits the list in half Mergesorts the two halves Then merges the two sorted halves

together Mergesort can be implemented

recursively

http://ecomputernotes.com

Page 11: Computer notes - Mergesort

Mergesort

The mergesort algorithm involves three steps:• If the number of items to sort is 0 or 1,

return• Recursively sort the first and second

halves separately• Merge the two sorted halves into a

sorted group

http://ecomputernotes.com

Page 12: Computer notes - Mergesort

Merging: animation

4 8 10 12 2 5 7 11

2

http://ecomputernotes.com

Page 13: Computer notes - Mergesort

Merging: animation

4 8 10 12 2 5 7 11

2 4

http://ecomputernotes.com

Page 14: Computer notes - Mergesort

Merging: animation

4 8 10 12 2 5 7 11

2 4 5

http://ecomputernotes.com

Page 15: Computer notes - Mergesort

Merging

4 8 10 12 2 5 7 11

2 4 5 7

http://ecomputernotes.com

Page 16: Computer notes - Mergesort

Mergesort

8 12 11 2 7 5410

Split the list in half.

8 12410

Mergesort the left half.

Split the list in half. Mergesort the left half.

410

Split the list in half. Mergesort the left half.

10

Mergesort the right.

4http://ecomputernotes.com

Page 17: Computer notes - Mergesort

Mergesort

8 12 11 2 7 5410

8 12410

410

Mergesort the right half.

Merge the two halves.

104 8 12

128

Merge the two halves.

88 12

http://ecomputernotes.com

Page 18: Computer notes - Mergesort

Mergesort

8 12 11 2 7 5410

8 12410

Merge the two halves.

410

Mergesort the right half. Merge the two halves.

104 8 12

10 1284

104 8 12

http://ecomputernotes.com

Page 19: Computer notes - Mergesort

Mergesort

10 12 11 2 7 584

Mergesort the right half.

11 2 7 5

11 2

11 2

http://ecomputernotes.com

Page 20: Computer notes - Mergesort

Mergesort

10 12 11 2 7 584

Mergesort the right half.

11 2 7 5

11 22 11

2 11

http://ecomputernotes.com

Page 21: Computer notes - Mergesort

Mergesort

10 12 11 2 7 584

Mergesort the right half.

11 2 7 52 11

75

7 5

http://ecomputernotes.com

Page 22: Computer notes - Mergesort

Mergesort

10 12 11 2 7 584

Mergesort the right half.

11 2 572 11

http://ecomputernotes.com

Page 23: Computer notes - Mergesort

Mergesort

10 12 2 5 7 1184

Mergesort the right half.

http://ecomputernotes.com

Page 24: Computer notes - Mergesort

Mergesort

5 7 8 10 11 1242

Merge the two halves.

http://ecomputernotes.com

Page 25: Computer notes - Mergesort

void mergeSort(float array[], int size){ int* tmpArrayPtr = new int[size];

if (tmpArrayPtr != NULL) mergeSortRec(array, size, tmpArrayPtr); else { cout << “Not enough memory to sort list.\n”); return; }

delete [] tmpArrayPtr;}

Mergesort

http://ecomputernotes.com

Page 26: Computer notes - Mergesort

void mergeSortRec(int array[],int size,int tmp[]){ int i; int mid = size/2; if (size > 1){ mergeSortRec(array, mid, tmp); mergeSortRec(array+mid, size-mid, tmp);

mergeArrays(array, mid, array+mid, size-mid, tmp);

for (i = 0; i < size; i++) array[i] = tmp[i]; }}

Mergesort

http://ecomputernotes.com

Page 27: Computer notes - Mergesort

3 5 15 28 30 6 10 14 22 43 50a:a: b:b:

aSize: 5aSize: 5 bSize: 6bSize: 6

mergeArrays

tmp:tmp:

http://ecomputernotes.com

Page 28: Computer notes - Mergesort

mergeArrays

5 15 28 30 10 14 22 43 50a:a: b:b:

tmp:tmp:

i=0i=0

k=0k=0

j=0j=0

3 6

http://ecomputernotes.com

Page 29: Computer notes - Mergesort

mergeArrays

5 15 28 30 10 14 22 43 50a:a: b:b:

tmp:tmp:

i=0i=0

k=0k=0

3

j=0j=0

3 6

http://ecomputernotes.com

Page 30: Computer notes - Mergesort

mergeArrays

3 15 28 30 10 14 22 43 50a:a: b:b:

tmp:tmp:

i=1i=1 j=0j=0

k=1k=1

3 5

5 6

http://ecomputernotes.com

Page 31: Computer notes - Mergesort

mergeArrays

3 5 28 30 10 14 22 43 50a:a: b:b:

3 5tmp:tmp:

i=2i=2 j=0j=0

k=2k=2

6

15 6

http://ecomputernotes.com

Page 32: Computer notes - Mergesort

mergeArrays

3 5 28 30 6 14 22 43 50a:a: b:b:

3 5 6tmp:tmp:

i=2i=2 j=1j=1

k=3k=3

15 10

10

http://ecomputernotes.com

Page 33: Computer notes - Mergesort

10

mergeArrays

3 5 28 30 6 22 43 50a:a: b:b:

3 5 6tmp:tmp:

i=2i=2 j=2j=2

k=4k=4

15 10 14

14

http://ecomputernotes.com

Page 34: Computer notes - Mergesort

1410

mergeArrays

3 5 28 30 6 14 43 50a:a: b:b:

3 5 6tmp:tmp:

i=2i=2 j=3j=3

k=5k=5

15 10 22

15

http://ecomputernotes.com

Page 35: Computer notes - Mergesort

1410

mergeArrays

3 5 30 6 14 43 50a:a: b:b:

3 5 6tmp:tmp:

i=3i=3 j=3j=3

k=6k=6

15 10 22

2215

28

http://ecomputernotes.com

Page 36: Computer notes - Mergesort

1410

mergeArrays

3 5 30 6 14 50a:a: b:b:

3 5 6tmp:tmp:

i=3i=3 j=4j=4

k=7k=7

15 10 22

2815

28 43

22

http://ecomputernotes.com

Page 37: Computer notes - Mergesort

1410

mergeArrays

3 5 6 14 50a:a: b:b:

3 5 6tmp:tmp:

i=4i=4 j=4j=4

k=8k=8

15 10 22

3015

28 43

22

30

28

http://ecomputernotes.com

Page 38: Computer notes - Mergesort

1410

mergeArrays

3 5 6 14 50a:a: b:b:

3 5 6 30tmp:tmp:

i=5i=5 j=4j=4

k=9k=9

15 10 22

15

28 43

22

30

28 43 50

Done.

http://ecomputernotes.com

Page 39: Computer notes - Mergesort

Merge Sort and Linked Lists

Sort Sort

Merge

http://ecomputernotes.com

Page 40: Computer notes - Mergesort

Mergesort AnalysisMerging the two lists of size n/2:

O(n)

Merging the four lists of size n/4:

O(n)...

Merging the n lists of size 1:

O(n)

O (lg n)times

Mergesort is O(n lg n) Space? The other sorts we have looked at (insertion, selection)

are in-place (only require a constant amount of extra space)

Mergesort requires O(n) extra space for merging

Page 41: Computer notes - Mergesort

Mergesort Analysis

Mergesort is O(n lg n) Space? The other sorts we have looked at

(insertion, selection) are in-place (only require a constant amount of extra space)

Mergesort requires O(n) extra space for merging

http://ecomputernotes.com

Page 42: Computer notes - Mergesort

Quicksort

Quicksort is another divide and conquer algorithm

Quicksort is based on the idea of partitioning (splitting) the list around a pivot or split value

http://ecomputernotes.com

Page 43: Computer notes - Mergesort

Quicksort

First the list is partitioned around a pivot value. Pivot can be chosen from the beginning, end or middle of list):

8 32 11 754 10124 5

5

pivot value

http://ecomputernotes.com

Page 44: Computer notes - Mergesort

Quicksort

The pivot is swapped to the last position and the remaining elements are compared starting at theends.

8 3 2 11 7 54 10124 5

low high

5

pivot value

http://ecomputernotes.com

Page 45: Computer notes - Mergesort

Quicksort

Then the low index moves right until it is at an element that is larger than the pivot value (i.e., it is on the wrong side)

8 6 2 11 7 510124 6

low high

5

pivot value

312

http://ecomputernotes.com

Page 46: Computer notes - Mergesort

Quicksort

Then the high index moves left until it is at an element that is smaller than the pivot value (i.e., it is on the wrong side)

8 6 2 11 7 54 10124 6

low high

5

pivot value

3 2

http://ecomputernotes.com

Page 47: Computer notes - Mergesort

Quicksort

Then the two values are swapped and the index values are updated:

8 6 2 11 7 54 10124 6

low high

5

pivot value

32 12

http://ecomputernotes.com

Page 48: Computer notes - Mergesort

Quicksort

This continues until the two index values pass each other:

8 6 12 11 7 5424 6

low high

5

pivot value

3103 10

http://ecomputernotes.com

Page 49: Computer notes - Mergesort

Quicksort

This continues until the two index values pass each other:

8 6 12 11 7 5424 6

lowhigh

5

pivot value

103

http://ecomputernotes.com

Page 50: Computer notes - Mergesort

Quicksort

Then the pivot value is swapped into position:

8 6 12 11 7 5424 6

lowhigh

103 85

http://ecomputernotes.com

Page 51: Computer notes - Mergesort

Quicksort

Recursively quicksort the two parts:

5 6 12 11 7 8424 6103

Quicksort the left part Quicksort the right part

5

http://ecomputernotes.com

Page 52: Computer notes - Mergesort

void quickSort(int array[], int size){ int index;

if (size > 1) { index = partition(array, size); quickSort(array, index); quickSort(array+index+1, size - index-1); }}

Quicksort

http://ecomputernotes.com

Page 53: Computer notes - Mergesort

int partition(int array[], int size){ int k; int mid = size/2; int index = 0;

swap(array, array+mid); for (k = 1; k < size; k++){ if (array[k] < array[0]){ index++; swap(array+k, array+index); } } swap(array, array+index); return index;}

Quicksort

Page 54: Computer notes - Mergesort

Data Structures-Course Recap

Arrays Link Lists Stacks Queues Binary Trees Sorting

http://ecomputernotes.com