Merge Sort - PowerPoint PPT Presentation

1 / 34
About This Presentation
Title:

Merge Sort

Description:

Merge ... 7 2 9 4 2 4 7 9. 3 8 6 1 1 3 8 6. 7 2 2 7. 9 4 4 9. 3 8 3 8. 6 1 1 6. 7 7 ... copy balance of unexhausted array into merged array. void merge ( int i1, ... – PowerPoint PPT presentation

Number of Views:91
Avg rating:3.0/5.0
Slides: 35
Provided by: pabitr
Category:

less

Transcript and Presenter's Notes

Title: Merge Sort


1
Merge Sort
2
Merge Sort
  • In plain English if the size of the array gt 1,
    split the array into two halves, and recursively
    sort both halves when the sorts return, merge
    the two halves
  • Pseudocode for function mergesort
  • if array size equals 1
  • return
  • copy first half into leftArray
  • copy second half into rightArray
  • sort (leftArray)
  • sort (rightArray)
  • merge leftArray with rightArray

3
Execution Example
  • Partition

7 2 9 4 3 8 6 1 ? 1 2 3 4 6 7 8 9
4
Execution Example (cont.)
  • Recursive call, partition

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
5
Execution Example (cont.)
  • Recursive call, partition

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
6
Execution Example (cont.)
  • Recursive call, base case

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
7 ? 7
2 ? 2
9 ? 9
4 ? 4
3 ? 3
8 ? 8
6 ? 6
1 ? 1
7
Execution Example (cont.)
  • Recursive call, base case

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
7 ? 7
2 ? 2
9 ? 9
4 ? 4
3 ? 3
8 ? 8
6 ? 6
1 ? 1
8
Execution Example (cont.)
  • Merge

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
7 ? 7
2 ? 2
9 ? 9
4 ? 4
3 ? 3
8 ? 8
6 ? 6
1 ? 1
9
Execution Example (cont.)
  • Recursive call, , base case, merge

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
7 ? 7
2 ? 2
3 ? 3
8 ? 8
6 ? 6
1 ? 1
9 ? 9
4 ? 4
10
Execution Example (cont.)
  • Merge

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 8 6
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
7 ? 7
2 ? 2
9 ? 9
4 ? 4
3 ? 3
8 ? 8
6 ? 6
1 ? 1
11
Execution Example (cont.)
  • Recursive call, , merge, merge

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 6 8
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
7 ? 7
2 ? 2
9 ? 9
4 ? 4
3 ? 3
8 ? 8
6 ? 6
1 ? 1
12
Execution Example (cont.)
  • Merge

7 2 9 4 ? 3 8 6 1 ? 1 2 3 4 6 7 8 9
7 2 ? 9 4 ? 2 4 7 9
3 8 6 1 ? 1 3 6 8
7 ? 2 ? 2 7
9 4 ? 4 9
3 8 ? 3 8
6 1 ? 1 6
7 ? 7
2 ? 2
9 ? 9
4 ? 4
3 ? 3
8 ? 8
6 ? 6
1 ? 1
13
Assume We Have a merge Method
void mergeSort ( int A100, int i, int j) int
m if ( i lt j ) m ( i j )/2 mergeSort (A,
i, m) mergeSort (A, m1, j) merge (A, i, m,
j)
main( ) int A100 int size / read array A
and its size / mergeSort(A , 0, size-1)
14
Merge Method
  • Merge algorithm in plain English while left
    right arrays still have elements, copy the lower
    element from either into the merged array when
    either left or right array is exhausted, copy the
    remainder of the other array into the merged
    array
  • In pseudocode
  • while neither array exhausted
  • if element of left array lt element of right
    array
  • copy left element into merged array
    increment index
  • else
  • copy right element into merged array
    increment index
  • copy balance of unexhausted array into merged
    array

15
Function merge
void merge ( int i1, int j1, int j2 ) int i2,
k1, k2, k int tmpArray100 i2 j1 1 k1
i1 k2 i2 k 0
while ((k1 lt j1) (k2 lt j2)) if (k1 gt
j1) / Left half is exhausted / / Copy from
the right half / tmpArray k Ak2 k2
Contd..
else if (k2 gt j2) /Right half is
exhausted/ / Copy from the left half /
tmpArray k Ak1 k1
16
Contd
Contd..
else if (Ak1 lt Ak2) / Left indx has a
smaller value / / Copy from the left half /
tmpArrayk Ak1 k1 else /
Right indx has a smaller value / / Copy from
the right half / tmpArrayk Ak2 k2
k / Advance indx for writing /
/ Copy temporary array back to the original
array / --k / has size of tempArray /
while (k gt 0) Ai1k tmpArrayk
--k
17
Insertion Sort
  • In plain English for each element starting with
    the second, pull the element, then look at all
    earlier elements and shift larger ones to the
    right, then insert the element
  • In pseudocode
  • for each element from second to last
  • save the element
  • for each earlier element that is larger
  • shift it right
  • insert current element

18
Selection Sort
4 5 3 1 2
19
Insertion Sort
4 5 3 1 2
20
Insertion Sort
4 5 3 1 2
21
Insertion Sort
4 5 3 1 2
4 5 1 2
22
Insertion Sort
4 5 3 1 2
4 5 1 2
4 5 1 2
23
Insertion Sort
4 5 3 1 2
4 5 1 2
4 5 1 2
3 4 5 1 2
24
Insertion Sort
4 5 3 1 2
3 4 5 1 2
4 5 1 2
4 5 1 2
3 4 5 1 2
25
Insertion Sort
4 5 3 1 2
3 4 5 1 2
4 5 1 2
3 4 5 2
4 5 1 2
3 4 5 1 2
26
Insertion Sort
4 5 3 1 2
3 4 5 1 2
4 5 1 2
3 4 5 2
4 5 1 2
3 4 5 2
3 4 5 1 2
27
Insertion Sort
4 5 3 1 2
3 4 5 1 2
4 5 1 2
3 4 5 2
4 5 1 2
3 4 5 2
3 4 5 2
3 4 5 1 2
28
Insertion Sort
4 5 3 1 2
3 4 5 1 2
4 5 1 2
3 4 5 2
4 5 1 2
3 4 5 2
3 4 5 2
3 4 5 1 2
1 3 4 5 2
29
Insertion Sort
4 5 3 1 2
3 4 5 1 2
1 3 4 5 2
4 5 1 2
3 4 5 2
4 5 1 2
3 4 5 2
3 4 5 2
3 4 5 1 2
1 3 4 5 2
30
Insertion Sort
4 5 3 1 2
3 4 5 1 2
1 3 4 5 2
4 5 1 2
3 4 5 2
1 3 4 5
4 5 1 2
3 4 5 2
3 4 5 2
3 4 5 1 2
1 3 4 5 2
31
Insertion Sort
4 5 3 1 2
3 4 5 1 2
1 3 4 5 2
4 5 1 2
3 4 5 2
1 3 4 5
4 5 1 2
3 4 5 2
1 3 4 5
3 4 5 2
3 4 5 1 2
1 3 4 5 2
32
Insertion Sort
4 5 3 1 2
3 4 5 1 2
1 3 4 5 2
4 5 1 2
3 4 5 2
1 3 4 5
4 5 1 2
3 4 5 2
1 3 4 5
3 4 5 2
1 3 4 5
3 4 5 1 2
1 3 4 5 2
33
Insertion Sort
4 5 3 1 2
3 4 5 1 2
1 3 4 5 2
4 5 1 2
3 4 5 2
1 3 4 5
4 5 1 2
3 4 5 2
1 3 4 5
3 4 5 2
1 3 4 5
3 4 5 1 2
1 3 4 5 2
1 2 3 4 5
34
for (i1 iltn i) / Consider Ai / /
Search for the correct insertion location of Ai
/ t Ai / Store Ai in a temporary
variable / j 0 / Initialize search
location / while (t gt Aj) j / Skip
smaller entries / / Here j holds the desired
insertion location / / Shift forward the
remaining entries each by one location / for
(ki-1 kgtj --k) Ak1 Ak / Finally
insert the old Ai at the j-th location / Aj
t
Write a Comment
User Comments (0)
About PowerShow.com