#include <iostream>
#include <vector>
using namespace std;
void merge(string arr[], int si, int mid, int ei) {
int m = mid; // correct
int i = si; // correct
vector<string> temp;// i wrote it <vector> which is wrong
int n = ei; // n
int j = mid+1; // j
while(i<=m && j<=n) {
if(arr[i] <= arr[j]) {
temp.push_back(arr[i]);
i++;
} else {
temp.push_back(arr[j]);
j++;
}
}
while(i <= m) {
temp.push_back(arr[i]);
i++;
}
while(j <= n) {
temp.push_back(arr[j]);
j++;
}
// mistake: i put this loop inside merge function
for(int idx=0, x=si; x<=ei; x++) {
arr[x] = temp[idx++];
}
}
void mergeSort(string arr[], int si, int ei) {
if(si >= ei) {
return;
}
int mid = si + (ei-si)/2; // mistakes i forgot the formula of mid
mergeSort(arr, si, mid); // left half
mergeSort(arr, mid+1, ei); // right half
merge(arr, si, mid, ei);
}
void printArray(string arr[], int n) {
for(int i=0; i<n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
string arr[4] = {"mars", "mercury", "sun", "earth"};
mergeSort(arr, 0, 3);
cout << "Arranged : ";
printArray(arr, 4);
return 0;
}
OUTPUT:
earth mars mercury suns
No comments:
Post a Comment