Advertisement
Guest User

zadatak 1

a guest
May 24th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAXEL 50
  5.  
  6. void dodeli(int dn, int gn, int d[],int s[]);
  7. void merges1(int i1, int i2, int j1, int j2, int *k, int *ce, int *de);
  8. void merges(int an, int ae[]);
  9.  
  10. int main()
  11. {
  12.     int a[100], i, n;
  13.     float srednja_vrednost=0.0;
  14.     printf("Unesite broj elemenata koji treba biti sortiran:");
  15.     scanf("%d",&n);
  16.     for(i=0;i<n;++i)
  17.     {
  18.         printf("%d.Unesite element:",i+1);
  19.         scanf("%d",&a[i]);
  20.     }
  21.     merges(n,a);
  22.     printf("U rastucem poretku:\n");
  23.  
  24.     for(i=0;i<n;++i)
  25.     {
  26.         printf("%d\t",a[i]);
  27.         srednja_vrednost=srednja_vrednost+a[i];
  28.     }
  29.     printf("\nSREDNJA VREDNOST NIZA IZNOSI:%.2f",srednja_vrednost/((float)n));
  30.     return 0;
  31. }
  32.  
  33. void merges1(int i1, int i2, int j1, int j2, int *k, int *ce, int *de)
  34. {
  35.     int k1;
  36.     k1=*k;
  37.     while((j1<=j2)&&(i1<=i2))
  38.         if(ce[i1]<ce[j1])de[k1++]=ce[i1++];
  39.     else de[k1++]=ce[j1++];
  40.     while(i1<=i2)de[k1++]=ce[i1++];
  41.     while(j1<=j2)de[k1++]=ce[j1++];
  42.     *k=k1;
  43. }
  44.  
  45. void merges(int an, int ae[])
  46. {
  47.     int i1,i2,j1,j2,k,k1,I;
  48.     int be[MAXEL];
  49.     int *ce, *de;
  50.     I=0;
  51.     while(1)
  52.     {
  53.         switch(I)
  54.         {
  55.         case 0:
  56.             ce=ae;de=be;
  57.             break;
  58.         case 1:
  59.             ce=be;de=ae;
  60.             break;
  61.         }
  62.         j2=-1;
  63.         k=1;
  64.         k1=0;
  65.         while(1)
  66.         {
  67.             i1=i2=j2+1;
  68.             while((i2<an-1)&&(ce[i2]<ce[i2+1]))i2++;
  69.             if((j1=i2+1)==an)
  70.                {
  71.                    if(k==1)
  72.                 {
  73.                     if(I)
  74.                 dodeli(0,an-1,ae,be);
  75.                 }
  76.                 else
  77.                     dodeli(i1,i2,de,ce);
  78.                 break;
  79.                }
  80.                k++;
  81.                j2=j1;
  82.                while((j2<an-1)&&(ce[j2]<ce[j2+1]))j2++;
  83.  
  84.                merges1(i1,i2,j1,j2,&k1,ce,de);
  85.                if(j2==an-1) break;
  86.                k++;
  87.         }
  88.         if(k==1)break;
  89.         if((k==2)&&!I)
  90.         {
  91.             dodeli(0,an-1,ae,be);
  92.                 break;
  93.         }
  94.         I=1-I;
  95.     }
  96. }
  97.  
  98. void dodeli(int dn,int gn,int d[],int s[])
  99. {
  100.     int i;
  101.     for(i=dn;i<=gn;i++)
  102.         d[i]=s[i];
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement