Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAXEL 50
- void dodeli(int dn, int gn, int d[],int s[]);
- void merges1(int i1, int i2, int j1, int j2, int *k, int *ce, int *de);
- void merges(int an, int ae[]);
- int main()
- {
- int a[100], i, n;
- float srednja_vrednost=0.0;
- printf("Unesite broj elemenata koji treba biti sortiran:");
- scanf("%d",&n);
- for(i=0;i<n;++i)
- {
- printf("%d.Unesite element:",i+1);
- scanf("%d",&a[i]);
- }
- merges(n,a);
- printf("U rastucem poretku:\n");
- for(i=0;i<n;++i)
- {
- printf("%d\t",a[i]);
- srednja_vrednost=srednja_vrednost+a[i];
- }
- printf("\nSREDNJA VREDNOST NIZA IZNOSI:%.2f",srednja_vrednost/((float)n));
- return 0;
- }
- void merges1(int i1, int i2, int j1, int j2, int *k, int *ce, int *de)
- {
- int k1;
- k1=*k;
- while((j1<=j2)&&(i1<=i2))
- if(ce[i1]<ce[j1])de[k1++]=ce[i1++];
- else de[k1++]=ce[j1++];
- while(i1<=i2)de[k1++]=ce[i1++];
- while(j1<=j2)de[k1++]=ce[j1++];
- *k=k1;
- }
- void merges(int an, int ae[])
- {
- int i1,i2,j1,j2,k,k1,I;
- int be[MAXEL];
- int *ce, *de;
- I=0;
- while(1)
- {
- switch(I)
- {
- case 0:
- ce=ae;de=be;
- break;
- case 1:
- ce=be;de=ae;
- break;
- }
- j2=-1;
- k=1;
- k1=0;
- while(1)
- {
- i1=i2=j2+1;
- while((i2<an-1)&&(ce[i2]<ce[i2+1]))i2++;
- if((j1=i2+1)==an)
- {
- if(k==1)
- {
- if(I)
- dodeli(0,an-1,ae,be);
- }
- else
- dodeli(i1,i2,de,ce);
- break;
- }
- k++;
- j2=j1;
- while((j2<an-1)&&(ce[j2]<ce[j2+1]))j2++;
- merges1(i1,i2,j1,j2,&k1,ce,de);
- if(j2==an-1) break;
- k++;
- }
- if(k==1)break;
- if((k==2)&&!I)
- {
- dodeli(0,an-1,ae,be);
- break;
- }
- I=1-I;
- }
- }
- void dodeli(int dn,int gn,int d[],int s[])
- {
- int i;
- for(i=dn;i<=gn;i++)
- d[i]=s[i];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement