Merge - Sort

A merge sort algorithm used to sort an array o...Image via Wikipedia
Source Code in C

1: Merge - Sort

   2:  #include <stdio.h>
   3:  #include <stdlib.h>
   4:  
   5:  void Merge (int c[], // Phgh : 2 taksinomhmena tmhmata etoima gia sygxoneush
   6:              int d[], // Pinakas proorismou
   7:              int L,   // Arxh tou 1ou tmhmatos
   8:              int M,   // Telos tou 1ou tmhmatos
   9:          int R,   // Telos tou 2ou tmhmatos
  10:          int *plithos); //metritis gia to plithos sigrisewn
  11:  void MergePass (int x[], // Phgh : me zeygaria apo taksinomhmena tmhmata
  12:                  int y[], // Pinakas proorismou
  13:                  int s,   // Megethos tmhmatos
  14:          int n,   // Synoliko megethos tou x[] kai tou y[]
  15:          int *plithos); //metritis gia to plithos sigrisewn
  16:  void MergeSort (int a[], //Pinakas gia taksinomisi
  17:          int b[],   //bohthitikos pinakas
  18:          int n,   // Arithmos stoixeiwn ston a[]
  19:          int *plithos); //metritis gia to plithos sigrisewn
  20:  
  21:  int main()main()()
  22:  {
  23:   int plithos;
  24:   int max;
  25:   int i;
  26:   int *x;
  27:   int *z;
  28:   printf(“dose to megethos toy pinaka:”);
  29:   scanf(“%d”,&max);
  30:   x=(int*)malloc(max*sizeof(int));
  31:   i=0;
  32:   while(i<max)
  33:    {
  34:     printf(“\nDwse ena x%d arithmo:  “,i);
  35:     scanf(“%d”,&x[i]);
  36:     i++;
  37:     }
  38:   i=0;
  39:   printf(“\nOi arithmoi tou X pinaka einai:\n”);
  40:   while(i<max)
  41:    {
  42:     printf(“%d,”,x[i]);
  43:     i++;
  44:     }
  45:   i=0;
  46:   plithos=0;
  47:   MergeSort(x,z,max,&plithos);
  48:   i=0;
  49:   printf(“\nO neos Z pinakas einai:\n”);
  50:   while(i<max)
  51:    {
  52:     printf(“%d,”,x[i]);
  53:     i++;
  54:     }
  55:   printf(“\nto plithos ton sygkriseon pou eginan einai: %d”,plithos);
  56:   return 0;
  57:  }
  58:  
  59:  
  60:  //Sugxoneuei ta: c[L:M] , c[M+1:R] sto d[L:R]
  61:  void Merge (int c[], // Phgh : 2 taksinomhmena tmhmata etoima gia sygxoneush
  62:              int d[], // Pinakas proorismou
  63:              int L,   // Arxh tou 1ou tmhmatos
  64:              int M,   // Telos tou 1ou tmhmatos
  65:          int R,   // Telos tou 2ou tmhmatos
  66:          int *plithos) //metritis gia to plithos sigrisewn
  67:  {
  68:     int i = L,        // deikths gia to 1o tmhma
  69:         j = M+1,      // deikths gia to 2o
  70:         k = L;        // deikths gia to apotelesma
  71:  
  72:  // sygxoneuei mexri to i h to j ginoun megalutera ap’to megethos twn adistoixwn tmhmatwn
  73:     while ( (i <= M) && (j <= R) )
  74:       {
  75:        (*plithos)++;
  76:        if (c[i] <= c[j])  d[k++] = c[i++];
  77:        else               d[k++] = c[j++];
  78:        }
  79:  
  80:  // analambanei ta ypoloipa stoixeia
  81:     while ( i <= M )
  82:        d[k++] = c[i++];
  83:     while ( j <= R )
  84:        d[k++] = c[j++];
  85:  }
  86:  
  87:  //Sygxoneuei taksinomimena tmhmata megethous ’s’.
  88:  void MergePass (int x[], // Phgh : me zeygaria apo taksinomhmena tmhmata
  89:                  int y[], // Pinakas proorismou
  90:                  int s,   // Megethos tmhmatos
  91:          int n,   // Synoliko megethos tou x[] kai tou y[]
  92:          int *plithos) //metritis gia to plithos sigrisewn
  93:  {
  94:          int i=0; // Arxikos deikths gia ta tmhmata pou epeksergazontai
  95:                  int j;
  96:  
  97:  // xeirizetai ola ta zeygaria twn tmhmatwn plhrous-megethous
  98:     while (i <= n - 2 * s)
  99:     {
 100:  //  Sygxoneuei 2 taksinomhmena tmhmata megethous ’s’
 101:        Merge (x, y, i, i+s-1, i+2*s-1,plithos);
 102:        i = i + 2*s;
 103:     }
 104:  //ligotera apo 2s stoixeia menoun
 105:     if (i + s < n)
 106:        Merge (x, y, i, i+s-1, n-1,plithos);
 107:     else
 108:        for ( j = i; j <= n-1; j++)
 109:           y[j] = x[j];   //antigrafei to teleytaio tmhma sto y
 110:  }
 111:  // Taksinomei ton pinaka a[0:n-1] .
 112:  void MergeSort (int a[], //Pinakas gia taksinomisi
 113:          int b[],   //bohthitikos pinakas
 114:          int n,   // Arithmos stoixeiwn ston a[]
 115:          int *plithos) //metritis gia to plithos sigrisewn
 116:  {
 117:     int s = 1;            // megethos tmhmatos
 118:     while (s < n)
 119:     {
 120:        MergePass (a, b, s, n,plithos); // sygxoneuei apo ton a[] ston b[]
 121:        s += s;                 // diplasiazei to megethos tou tmhmatos
 122:        MergePass (b, a, s, n,plithos); // sygxoneuei apo ton b[] ston a[]
 123:        s += s;                 // ksanadiplasiazei to megethos tou tmhmatos
 124:     }
 125:  }
Zemanta Pixie
Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

Leave a comment

Name: (Required)

eMail: (Required)

Website:

Comment: