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;
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
Post a Comment