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

Published in: Education, Technology, Business
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total views
1,986
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
150
Comments
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

    ×