|- - -|
|

Sastaviti program koji od dva sortirana niza stvara jedan sortiran niz (u slučaju da neki od unesenih nizova nije sortiran, program će ponuditi da ih on sortira; takođe, na korisniku je da odabere da li će krajnji niz da bude sortiran u opadajućem ili rastućem poredku).
rešenje (.c)

#include <stdio.h>
void buble(int niz[], int d);
void obrni(int niz[], int d);
void sortiraj(int a[], int b[], int c[], int d1, int d2);
int main()
{
int a[1000], b[1000], c[2000], i, d1, d2, o1=0, r1=0, o2=0, r2=0, z;
printf("Unesite duzinu prvog niza\n");
scanf("%d", &d1);
printf("Unesete clanove prvog niza\n");
for (i = 0; i < d1; i++)
scanf("%d", &a[i]);
printf("Unesite duzinu drugog niza\n");
scanf("%d", &d2);
printf("Unesite clanove drugog niza\n");
for (i = 0; i < d2; i++)
scanf("%d", &b[i]);
for (i = 0; i < d1-1; i++)
if (a[i] <= a[i+1])
r1++;
for (i = 0; i < d2-1; i++)
if (b[i] <= b[i+1])
r2++;
for (i = 0; i < d1-1; i++)
if (a[i] >= a[i+1])
o1++;
for (i = 0; i < d2-1; i++)
if (b[i] >= b[i+1])
o2++;
if ((o1 != d1-1) && (r1 != d1-1))
{
getchar();
printf("Prvi niz nije sortiran!\nUkoliko zelite da krajnji niz bude");
printf(" sortiran pritisnite y\n");
if (((z = getchar()) == 'y') || (z == 'Y'))
buble(a, d1);
else
printf("Vasim izborom krajnji niz nece biti dobro sortiran\n");
}
if ((o2 != d2-1) && (r2 != d2-1))
{
getchar();
printf("Drugi niz nije sortiran!\nUkoliko zelite da krajnji niz bude");
printf(" sortiran pritisnite y\n");
if (((z = getchar()) == 'y') || (z == 'Y'))
buble(b, d2);
else
printf("Vasim izborom krajnji niz nece biti dobro sortiran\n");
}
getchar();
if (o1 == d1-1)
obrni(a, d1);
if (o2 == d2-1)
obrni(b, d2);>
sortiraj(a, b, c, d1, d2);
printf("Zelite li da krajnji niz bude sortiran u opadajucem\n");
printf("ili rastucem poredku? (O/R)\n");
while (((z = getchar()) != 'o') && (z != 'O') && (z != 'r') && (z != 'R'))
printf("(O/R)\n");
if ((z == 'o') || (z == 'O'))
obrni(c, d1+d2);
for (i = 0; i < d1+d2; i++)
printf("%d ", c[i]);
printf("\n");
getchar();
getchar();
return 0;
}
void buble(int niz[], int d)
{
int i, j, t;
for (i = d-2; i >= 0; i--)
for (j = 0; j <= i; j++)
if (niz[j] > niz[j+1])
{
t = niz[j];
niz[j] = niz[j+1];
niz[j+1] = t;
}
}
void obrni(int niz[], int d)
{
int i, t;
for (i = 0; i < d/2; i++)
{
t = niz[i];
niz[i] = niz[d-1-i];
niz[d-1-i] = t;
}
}
void sortiraj(int a[], int b[], int c[], int d1, int d2)
{
int i=0, j=0, k=0;
while(i < d1 || j < d2)
{
if (i < d1 && j < d2)
{
if (a[i] <= b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
}
else
{
if (i >= d1)
while (j < d2)
c[k++] = b[j++];
else
if (j >=d2)
while (i < d1)
c[k++] = a[i++];
}
}
}

Primer:
Za učitane nizove:
3 9 5 0 2
2 -3 8 8 0 3 1
ispisuje se:
Prvi niz nije sortiran!
Ukoliko zelite da krajnji niz bude sortiran pritisnite Y
y
Drugi niz nije sortiran!
Ukoliko zelite da krajnji niz bude sortiran pritisnite Y
y
Zelite li da krajnji niz bude sortiran u opadajućem
ili rastućem poredku? (O/R)
o
9 8 8 5 3 3 2 2 1 0 0 -3

|
|= - =|
|_ - _|