merge_sort

 #include<stdio.h>

#include<stdlib.h>
#include<time.h>

void merge(int a[],int l,int mid,int h){
  int i,j,k;
  int b[h+1];
  i=l,j=mid+1,k=l;

  while(i<=mid && j<=h){
    if(a[i]<a[j]){
      b[k++]=a[i++];
    }
    else
      b[k++]=a[j++];
  }
  for(;i<=mid;i++){
    b[k++]=a[i];
  }
  for(;j<=mid;j++){
    b[k++]=b[i];
  }
  for(i=l;i<=h;i++){
    a[i] = b[i];
  }
}

void mergeSort(int a[],int l,int h){
  int mid;
  if(l<h){
    mid = (l+h)/2;
    mergeSort(a,l,mid);
    mergeSort(a,mid+1,h);
    merge(a,l,mid,h);
  }
}

int main(){
  clock_t start_time = clock();
  int n;
  printf("Enter the no. of elements:");
  scanf("%d",&n);
  int a[n];

  for(int i=0;i<n;i++){
    a[i] = rand() % 100;
  }
 
  mergeSort(a,0,n-1);
 
  clock_t stop_time = clock();

  printf("Sorted element are: \n");
  for(int i=0;i<n-1;i++){
    printf("%d ",a[i]);
  }

  double timetake = (double)(stop_time-start_time)/CLOCKS_PER_SEC;
  printf("%lf time take ",timetake);

  return 0;
}

Comments