#include<iostream>
#include<vector>
using namespace std;
// conquer step - O(n)
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]) { // so jo value choti hai, ushe add krna h
temp.push_back(arr[i++]);
} else {
temp.push_back(arr[j++]);
}
}
// i will keep pushing itself until reaches mid
while(i <= mid) {
temp.push_back(arr[i++]);
}
// j will keep pushing itself until reaches ei
while(j <= ei) {
temp.push_back(arr[j++]);
}
// vector -> original array
for(int idx=si, x=0; idx <= ei; idx++) { // playing this loop on original arr
arr[idx] = temp[x++]; // temp ka iterater
}
}
// merge sort step - O(nlogn)
void mergeSort(int arr[], int si, int ei) {
if(si >= ei) {
return;
}
int mid = si + (ei-si)/2;
mergeSort(arr, si, mid); // left half
mergeSort(arr, mid+1, ei); // right half
merge(arr, si, mid, ei); // conquer
}
void printArr(int arr[], int n) {
for(int i=0; i<n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[6] = {6, 3, 7, 5, 2, 4};
int n = 6;
int si = 0;
int ei = n-1;
mergeSort(arr, si, ei);
printArr(arr, n);
return 0;
}
No comments:
Post a Comment