Pages

Friday, June 6, 2025

Merge Sort (using divide and conquer approach) in C++ with explaination!

#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

Stack using Linked List – Partial (University Exam Topic)

 #include <iostream> using namespace std; struct Node {     int data;     Node* next; }; class Stack {     Node* top; public:     Stac...