Write a program to sort elements of an array in ascending order using merge sort.
#include<stdio.h> #define size 10 void partition(int a[],int,int); void merge(int a[],int,int,int); void print(int*,int); int main() { int a[size] = {40,100,90,10,30,20,80,70,60,50},n; n = sizeof(a)/sizeof(a[0]); print(a,n); partition(a,0,n-1); print(a,n); return 0; } void print(int*a,int n) { int i; for(i = 0;i < n;i++) { printf("%d ",a[i]); } printf("\n"); } void partition(int a[],int min,int max) { int mid; if(min<max) { mid=(min+max)/2; partition(a,min,mid); partition(a,mid+1,max); merge(a,min,mid,max); } } void merge(int a[],int min,int mid,int max) { int temp[size]; int i,j,k; i = j = min; k = mid+1; while(j <= mid && k <= max) { if(a[j] <= a[k]) { temp[i] = a[j]; i++,j++; } else { temp[i] = a[k]; i++,k++; } } while(j <= mid) { temp[i] = a[j]; i++,j++; } while(k <= max) { temp[i] = a[k]; i++,k++; } for(i=min;i<=max;i++) { a[i] = temp[i]; } }
Output
40 100 90 10 30 20 80 70 60 50 10 20 30 40 50 60 70 80 90 100