Ashies

DAA MERGESORT

Sep 8th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.15 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. void mergesort(int a[],int i,int j);
  4. void merge(int a[],int p,int q,int r);
  5. int n;
  6.  
  7. void main(){
  8. int a[10],i;
  9.     printf("Enter no of elements:");
  10.     scanf("%d",&n);
  11.     printf("Enter array elements:");
  12.     for(i=0;i<n;i++)
  13.         scanf("%d",&a[i]);
  14.      
  15.     mergesort(a,0,n-1);
  16.    
  17.  
  18.  printf("\nSorted array is :");
  19.     for(i=0;i<(n);i++)
  20.         printf("%d ",a[i]);
  21.  
  22.    
  23. }
  24.  
  25. void mergesort(int a[],int p,int r){
  26. int q;
  27. if(p<r){
  28. q=((p+r)/2);
  29. mergesort(a,p,q);
  30. mergesort(a,q+1,r);
  31. merge(a,p,q,r);
  32. }
  33. }
  34.  
  35.  
  36. void merge(int a[],int p,int q,int r){
  37. int b[30];
  38. int i,j,k,c;
  39.  
  40. i=p;  //beginning index
  41. j=q+1;
  42. k=0; //will use it to uterate through b array
  43.  
  44. while(i<=q && j<=r)    //while elements in both lists
  45.     {
  46.         if(a[i]<a[j])   //checking two subarrays(metaphorically) (array is still same)
  47.             b[k++]=a[i++];
  48.         else
  49.             b[k++]=a[j++];
  50.     }
  51.  
  52. while(i<=q){ //copy remaining elements to auxiliarry array from first half of original array as it is still unsorted(after the half)
  53.  b[k++]=a[i++];
  54. }
  55.  
  56. while(j<=r)
  57.  b[k++]=a[j++];
  58.  
  59. for(i=p,j=0;i<=r;i++,j++)
  60.         a[i]=b[j];
  61.  
  62.  
  63. }
Add Comment
Please, Sign In to add comment