- #include<iostream>
- #include <math.h>
- #include <stdlib.h>
- #include <ctime>
- using namespace std;
- class sorta
- {
- int *arr;
- int n,low,mid ,count;
- public:
- void input();
- void mergeSort(int arr[],int low,int high);
- void merge(int arr[],int low,int high,int mid);
- void display();
- };
- void sort::input()
- {
- cout<<"ENTER NUMBER OF ELEMENTS YOU WANT IN YOUR ARRAY: ";
- cin>>n;
- arr=new int[n];
- // srand(time(NULL));
- cout<<"ENTER ELEMENTS"<<endl;
- for(int i=0;i<n;i++)
- {
- cin>>arr[i];
- /*
- int value = rand() % 100;
- arr[i]=value;
- */
- }
- count=0;
- mergeSort(arr,0,n-1);
- }
- void sort::mergeSort(int arr[],int low,int high)
- {
- int mid;
- if(low<high)
- {
- mid=(low+high)/2;
- mergeSort(arr,low,mid);
- mergeSort(arr,mid+1,high);
- merge(arr,low,high,mid);
- }
- }
- void sort::merge(int arr[],int low,int high,int mid)
- {
- int i,j,k,c[n];
- i=low;
- k=low;
- j=mid+1;
- while(i<=mid && j<=high)
- {
- count++;
- if(arr[i]<arr[j])
- {
- c[k]=arr[i];
- i++;
- k++;
- }
- else
- {
- c[k]=arr[j];
- k++;
- j++;
- }
- }
- while(i<=mid)
- {
- c[k]=arr[i];
- i++;
- k++;
- }
- while(j<=high)
- {
- c[k]=arr[j];
- k++;
- j++;
- }
- for(i=low;i<k;i++)
- {
- arr[i]=c[i];
- }
- }
- void sort::display()
- {
- cout<<endl;
- cout<<"Sorted Array"<<endl;
- for(int i=0;i<n;i++)
- {
- cout<<arr[i]<<"\t";
- }
- cout<<endl<<"No. of comparisons: "<<count<<endl;
- }
- int main()
- {
- sort obj;
- obj.input();
- obj.display();
- return 0;
- }
