#include <iostream>
#include <vector>
using namespace std;
void printArray(int arr[], int n) {
for(int i=0; i<n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void merge(int arr[], int si, int mid, int ei) {
vector<int> temp;
int i = si;
int j = mid+1;
while(i <= mid && j <= ei) {
if(arr[i] < arr[j]) {
temp.push_back(arr[i++]);
} else {
temp.push_back(arr[j++]);
}
}
// copy remeining code
while(i <= mid) {
temp.push_back(arr[i++]);
}
while(j <= ei) {
temp.push_back(arr[j++]);
}
// copy code back to the array
for(int idx=si, x=0; idx <=ei; idx++) {
arr[idx] = temp[x++]; // my major mistake
}
}
void mergeSort(int arr[], int si, int ei) {
if(si >= ei) {
return;
}
int mid = si+(ei-si)/2;
mergeSort(arr, si, mid); // left part
mergeSort(arr, mid+1, ei); // right part
merge(arr, si, mid, ei);
}
int main() {
int arr[] = {1,4, 5, 3, 2};
int n = sizeof(arr)/sizeof(int);
cout << "Original Array: \n";
printArray(arr, n);
mergeSort(arr, 0, n-1);
cout << "Merged Sort: \n";
printArray(arr, n);
return 0;
}
No comments:
Post a Comment