Upcoming SlideShare
×

# Computer notes - Mergesort

1,986 views

Published on

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

1 Comment
2 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
Views
Total views
1,986
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
150
1
Likes
2
Embeds 0
No embeds

No notes for slide
• End of lecture 44.
• Start of lecture 45
• End of lecture 45. At last!
• ### Computer notes - Mergesort

1. 1. Class No.39 Data Structures http://ecomputernotes.com
2. 2. Divide and Conquer What if we split the list into two parts? 10 12 8 4 2 11 7 5 http://ecomputernotes.com 10 12 8 4 2 11 7 5
3. 3. Divide and Conquer Sort the two parts: http://ecomputernotes.com 10 12 8 4 2 11 7 5 4 8 10 12 2 5 7 11
4. 4. Divide and Conquer Then merge the two parts together: http://ecomputernotes.com 4 8 10 12 2 5 7 11 2 4 5 7 8 10 11 12
5. 5. Analysis <ul><li>To sort the halves  ( n /2) 2 +( n /2) 2 </li></ul><ul><li>To merge the two halves  n </li></ul><ul><li>So, for n =100, divide and conquer takes: </li></ul><ul><ul><li>= (100/2) 2 + (100/2) 2 + 100 </li></ul></ul><ul><ul><li>= 2500 + 2500 + 100 </li></ul></ul><ul><ul><li>= 5100 ( n 2 = 10,000) </li></ul></ul>http://ecomputernotes.com
6. 6. Divide and Conquer <ul><li>Why not divide the halves in half? </li></ul><ul><li>The quarters in half? </li></ul><ul><li>And so on . . . </li></ul><ul><li>When should we stop? </li></ul><ul><ul><li>At n = 1 </li></ul></ul>http://ecomputernotes.com
7. 7. Search Divide and Conquer Recall: Binary Search http://ecomputernotes.com Search Search
8. 8. Sort Divide and Conquer Sort Sort Sort Sort Sort Sort http://ecomputernotes.com
9. 9. Divide and Conquer Combine Combine Combine http://ecomputernotes.com
10. 10. Mergesort <ul><li>Mergesort is a divide and conquer algorithm that does exactly that. </li></ul><ul><li>It splits the list in half </li></ul><ul><li>Mergesorts the two halves </li></ul><ul><li>Then merges the two sorted halves together </li></ul><ul><li>Mergesort can be implemented recursively </li></ul>http://ecomputernotes.com
11. 11. Mergesort <ul><li>The mergesort algorithm involves three steps: </li></ul><ul><ul><li>If the number of items to sort is 0 or 1, return </li></ul></ul><ul><ul><li>Recursively sort the first and second halves separately </li></ul></ul><ul><ul><li>Merge the two sorted halves into a sorted group </li></ul></ul>http://ecomputernotes.com
12. 12. Merging: animation 4 8 10 12 2 5 7 11 2 http://ecomputernotes.com
13. 13. Merging: animation 4 8 10 12 2 5 7 11 2 4 http://ecomputernotes.com
14. 14. Merging: animation 4 8 10 12 2 5 7 11 2 4 5 http://ecomputernotes.com
15. 15. Merging 4 8 10 12 2 5 7 11 2 4 5 7 http://ecomputernotes.com
16. 16. Mergesort Split the list in half. Mergesort the left half. Split the list in half. Mergesort the left half. Split the list in half. Mergesort the left half. 10 Mergesort the right. 4 http://ecomputernotes.com 8 12 11 2 7 5 4 10 8 12 4 10 4 10
17. 17. Mergesort 8 12 4 10 Mergesort the right half. Merge the two halves. 12 8 http://ecomputernotes.com 8 12 11 2 7 5 4 10 4 10 10 4 8 12 Merge the two halves . 8 8 12
18. 18. Mergesort 8 12 4 10 Merge the two halves. Mergesort the right half. Merge the two halves. http://ecomputernotes.com 8 12 11 2 7 5 4 10 4 10 10 4 8 12 10 12 8 4 10 4 8 12
19. 19. Mergesort 10 12 11 2 7 5 8 4 Mergesort the right half. 11 2 http://ecomputernotes.com 11 2 7 5 11 2
20. 20. Mergesort 10 12 11 2 7 5 8 4 Mergesort the right half. 11 2 7 5 11 2 2 11 http://ecomputernotes.com 2 11
21. 21. Mergesort 10 12 11 2 7 5 8 4 Mergesort the right half. 11 2 7 5 2 11 7 5 7 5 http://ecomputernotes.com
22. 22. Mergesort 10 12 11 2 7 5 8 4 Mergesort the right half. 11 2 5 7 2 11 http://ecomputernotes.com
23. 23. Mergesort 10 12 2 5 7 11 8 4 Mergesort the right half. http://ecomputernotes.com
24. 24. Mergesort 5 7 8 10 11 12 4 2 Merge the two halves. http://ecomputernotes.com
25. 25. 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
26. 26. 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
27. 27. 3 5 15 28 30 6 10 14 22 43 50 a: b: mergeArrays http://ecomputernotes.com aSize: 5 bSize: 6 tmp:
28. 28. mergeArrays 5 15 28 30 10 14 22 43 50 a: b: tmp: i=0 k=0 j=0 3 6 http://ecomputernotes.com
29. 29. mergeArrays 5 15 28 30 10 14 22 43 50 a: b: tmp: i=0 k=0 3 j=0 3 6 http://ecomputernotes.com
30. 30. mergeArrays 3 15 28 30 10 14 22 43 50 a: b: tmp: i=1 j=0 k=1 3 5 5 6 http://ecomputernotes.com
31. 31. mergeArrays 3 5 28 30 10 14 22 43 50 a: b: 3 5 tmp: i=2 j=0 k=2 6 15 6 http://ecomputernotes.com
32. 32. mergeArrays 3 5 28 30 6 14 22 43 50 a: b: 3 5 6 tmp: i=2 j=1 k=3 15 10 10 http://ecomputernotes.com
33. 33. mergeArrays 10 3 5 28 30 6 22 43 50 a: b: 3 5 6 tmp: i=2 j=2 k=4 15 10 14 14 http://ecomputernotes.com
34. 34. mergeArrays 14 10 3 5 28 30 6 14 43 50 a: b: 3 5 6 tmp: i=2 j=3 k=5 15 10 22 15 http://ecomputernotes.com
35. 35. mergeArrays 14 10 3 5 30 6 14 43 50 a: b: 3 5 6 tmp: i=3 j=3 k=6 15 10 22 22 15 28 http://ecomputernotes.com
36. 36. mergeArrays 14 10 3 5 30 6 14 50 a: b: 3 5 6 tmp: i=3 j=4 k=7 15 10 22 28 15 28 43 22 http://ecomputernotes.com
37. 37. mergeArrays 14 10 3 5 6 14 50 a: b: 3 5 6 tmp: i=4 j=4 k=8 15 10 22 30 15 28 43 22 30 28 http://ecomputernotes.com
38. 38. mergeArrays 14 10 3 5 6 14 50 a: b: 3 5 6 30 tmp: i=5 j=4 k=9 15 10 22 15 28 43 22 30 28 43 50 Done. http://ecomputernotes.com
39. 39. Merge Sort and Linked Lists http://ecomputernotes.com Sort Sort Merge
40. 40. Mergesort Analysis Merging 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 <ul><li>Mergesort is O( n lg n ) </li></ul><ul><li>Space? </li></ul><ul><li>The other sorts we have looked at (insertion, selection) are in-place (only require a constant amount of extra space) </li></ul><ul><li>Mergesort requires O( n ) extra space for merging </li></ul>
41. 41. Mergesort Analysis <ul><li>Mergesort is O( n lg n ) </li></ul><ul><li>Space? </li></ul><ul><li>The other sorts we have looked at (insertion, selection) are in-place (only require a constant amount of extra space) </li></ul><ul><li>Mergesort requires O( n ) extra space for merging </li></ul>http://ecomputernotes.com
42. 42. Quicksort <ul><li>Quicksort is another divide and conquer algorithm </li></ul><ul><li>Quicksort is based on the idea of partitioning (splitting) the list around a pivot or split value </li></ul>http://ecomputernotes.com
43. 43. Quicksort First the list is partitioned around a pivot value. Pivot can be chosen from the beginning, end or middle of list): 8 3 2 11 7 5 12 4 5 http://ecomputernotes.com 4 10 5 pivot value
44. 44. Quicksort The pivot is swapped to the last position and the remaining elements are compared starting at the ends. 8 3 2 11 7 5 12 4 5 5 pivot value http://ecomputernotes.com 4 10 low high
45. 45. 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 5 10 12 4 6 5 pivot value 3 12 http://ecomputernotes.com low high
46. 46. 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 5 12 4 6 5 pivot value 3 2 http://ecomputernotes.com 4 10 low high
47. 47. Quicksort Then the two values are swapped and the index values are updated: 8 6 2 11 7 5 12 4 6 5 pivot value 3 2 12 http://ecomputernotes.com 4 10 low high
48. 48. Quicksort This continues until the two index values pass each other: 8 6 12 11 7 5 4 2 4 6 5 pivot value 3 10 3 10 http://ecomputernotes.com low high
49. 49. Quicksort This continues until the two index values pass each other: 8 6 12 11 7 5 4 2 4 6 5 pivot value 10 3 http://ecomputernotes.com low high
50. 50. Quicksort Then the pivot value is swapped into position: 8 6 12 11 7 5 4 2 4 6 10 3 8 5 http://ecomputernotes.com low high
51. 51. Quicksort Recursively quicksort the two parts: 5 6 12 11 7 8 4 2 4 6 10 3 5 http://ecomputernotes.com Quicksort the left part Quicksort the right part
52. 52. Quicksort 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); } } http://ecomputernotes.com
53. 53. 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
54. 54. Data Structures-Course Recap <ul><li>Arrays </li></ul><ul><li>Link Lists </li></ul><ul><li>Stacks </li></ul><ul><li>Queues </li></ul><ul><li>Binary Trees </li></ul><ul><li>Sorting </li></ul>http://ecomputernotes.com