Merge Sort
The detailed algorithm and explanation is shared here: https://rishabhjainiitbhu.blogspot.com/2019/08/sorting-algorithms.html#more
Here is the algorithm in short:
Here is the code for mergesort function in c++:
void mergeSort(int* arr, int l ,int r){ | |
if(l<r){ | |
int m= (r+l)/2; | |
mergeSort(arr, l, m); | |
mergeSort(arr, m+1, r); | |
merge(arr, l, m, r); | |
} | |
} |
The algorithm for merge function is:
- create two new arrays of lengths equal to these subarrays. Copy the contents into these.
- start iterating in two arrays, check for which element is shorter among the two and push the shorter into the original array.
Here is the code for merge in c++:
void merge(int* arr, int l, int m, int r){ | |
int n1 = m-l+1; | |
int n2 = r-m; | |
int left[n1]; | |
int right[n2]; | |
for (size_t i = 0; i < n1; i++) { | |
left[i] = arr[l+i]; | |
} | |
for (size_t j = 0; j < n2; j++) { | |
right[j] = arr[m+1+j]; | |
} | |
int i=0, j=0, k=l; | |
while (i<n1 && j<n2) { | |
if(left[i]<=right[j]){ | |
arr[k] = left[i]; | |
i++; | |
}else{ | |
arr[k] = right[j]; | |
j++; | |
} | |
k++; | |
} | |
while (i<n1) { | |
arr[k] = left[i]; | |
i++; | |
k++; | |
} | |
while (j<n2) { | |
arr[k] = right[j]; | |
j++; | |
k++; | |
} | |
} |
No comments:
Post a Comment