mirror of
https://github.com/dholerobin/Lecture_Notes.git
synced 2025-07-01 04:56:29 +00:00
Update 5MergeAt.md
This commit is contained in:
parent
127de198a4
commit
a875d8e336
@ -4,24 +4,24 @@ Now, let's discuss `mergeAt` procedure, which is used to merge two runs.
|
||||
|
||||
Let $base_i$ and $len_i$ are base address and length of $run_i$, respectively.
|
||||
|
||||

|
||||

|
||||
|
||||
We perform two operations before merging two runs:
|
||||
|
||||
1. Find index of the first element of $run_2$ into $run_1$. If the index turns out to be the last, then no merging is required.
|
||||
|
||||

|
||||

|
||||
|
||||
Otherwise just increment the base address for $run_1$, because the elements before this index are already in place.
|
||||
|
||||

|
||||

|
||||
|
||||
2. Similarly, find index of the last element of $run_1$ in $run_2$. If the index turns out to be the first, then no merging is required.
|
||||
|
||||

|
||||

|
||||
|
||||
Otherwise set $len_2$ to this index, because the elements after this index are already in place.
|
||||

|
||||

|
||||
|
||||
After performing this operation you notice that all elements of $run_2$ are less than last element of $run_1$ and first element fo $run_1$ is greater than first element of $run_2$, i.e. $run_1[base_1] > run_2[base_2]$. These implies two things:
|
||||
|
||||
@ -30,13 +30,13 @@ Conclusion 2. The first element of $run_2$ is the smallest element.
|
||||
|
||||
We will see how useful these conclusions are! Just keep it in mind.
|
||||
|
||||

|
||||

|
||||
|
||||
Now, Let say we are merging two sorted arrays of size _$len_1$_ and _$len_2$_. In traditional merge procedure, we create a new array of size $len_1$+$len_2$. But in Tim sort's merge procedure, we just create a new temporary array of size $min(len1,len2)$ and we copy the smaller array into this temporary array.
|
||||
|
||||
The main intention behind it is to decrease **merge space overhead**, because it reduces the number of required element movements.
|
||||
|
||||

|
||||

|
||||
|
||||
Notice that we can do merging in both directions: **left-to-right**, as in the traditional mergesort, or **right-to-left**.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user