Merge Sort

/***
Merge Sort: using linked list..
***/

#include<iostream>
#include<algorithm>

using namespace std;

class mergeSort {
public:
       mergeSort(int *a, int sz);
       ~mergeSort();
       void msort(int begin, int end);
       void print();
private:
       int *as;
       int *aux;
       int size;
       void merge(int begin, int mid, int end);
};

mergeSort::mergeSort(int *a, int sz):as(a), size(sz) {
       aux = new int[size];

}

mergeSort::~mergeSort() {
       delete [] aux;
}

void mergeSort::print(){
       for(int i = 0; i<size; i++)
              cout<<as[i]<<" ";
       cout << endl;
}

void mergeSort::msort(int begin, int end) {
       int mid;

       if(begin >= end) return;

       mid = (begin + end) / 2;

       msort(begin, mid);
       msort(mid+1, end);
       merge(begin, mid, end);
}

void mergeSort::merge(int begin, int mid, int end) {
       int i = begin;
       int j = mid + 1;

       //aux[k] is temp array, half sorted
       for(int k = begin; k<=end; k++)
              aux[k] = as[k];

       for(int k = begin; k <= end; k++) {

              if(i <= mid) {
                     if(j <= end) {
                           if(aux[i] < aux[j]) as[k] = aux[i++];
                           else as[k] = aux[j++];
                     } else as[k] = aux[i++];
              } else
                     as[k] = aux[j++];
       }

}

void main() {
       int a[] = {3, 1, 4, 5, 2, 8, 6};
       int size = sizeof(a) / sizeof(int);
       mergeSort st(a, size);
       st.msort(0, size-1);
       st.print();

}

Comments

Popular posts from this blog

Sudoku

Longest prefix matching - trie

Climbing Stairs