Uređivanje niza

Složeniji proces od  pretraživanja niza je uređivanje. Da bi se niz uredio neophodno je da se svaki element uporedi sa ostalim elementima, po potrbi, izvršiti njihovu međusobnu zamenu. Niz može biti sortiran u rastućem i opadajućem redosledu. Postoje nekoliko algoritama za sortiranje nizova.

Metod izbora (selection sort)

Zasniva se na veoma jednostavnoj ideji, izabrati najmanji element niza i dovesti ga na prvo mesto, zatim drugi najmanji, na drugo mesto, itd. do kraja niza.

Primer koji sortira niz u rastućem redosledu

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a[10];
int i, j, n, pom;
/* Unos broja elemenata niza*/
cout<<„Unesi broj elemenata niza“<<endl;
cin>>n;
/*Unos elemenata niza*/
for(i=0;i<n;i++)
{
cout<<„Unesi „<<i+1<<“ element niza „;
cin>>a[i];
cout<<endl;
}
/*sortiranje*/
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
pom=a[i];
a[i]=a[j];
a[j]=pom;
}
}
}
/*Ispis niza*/
cout<<„Niz je uredjen u rastu’em redosledu“<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<endl;

}
system(„PAUSE“);
return EXIT_SUCCESS;
}

selekt sort

Pr1.

Napravite program koji niz a čiji elementi su celi brojevi uređuje u rastućem redosledu koristeći funkcije?

Rešenje:

#include
#include
using namespace std;
void ucitajniz(int a[], int n)
{
int i;
for (i=0;i<n;i++)
{
cout<<“ Unesi „<<i+1<<“ element niza“<<endl; cin>>a[i];
}
}
void razmeni(int *a, int *b)
{
int pom=*a;
*a=*b;
*b=pom;
}
void sortiraj(int a[], int n)
{
int i, j;
for (i=0;i<n-1;i++)
{
for (j=i+1;j<n;j++) { if (a[i]>a[j])
razmeni(&a[i], &a[j]);
}
}
}
void ispisiniz(int a[], int n)
{
int i;
for (i=0;i<n;i++)
cout<<“ a[„<<i+1<<„] je „<<a[i]<<endl;

}

int main(int argc, char *argv[])
{
int a[10],n;
cout<<„Unesi broj elemenata niza“<<endl; cin>>n;
ucitajniz(a,n);
sortiraj (a,n);
cout<<“ Sortirani niz:“<<endl;
ispisiniz(a,n);
system(„PAUSE“);
return EXIT_SUCCESS;
}

Metod mehuriće (babl sort)

Algoritam sortiranja bubble sort poredi dva susedna elementa niza i ako su pogrešno rasporežđeni zamenjuje im mesta. Posle porežđnja svih susednih parova najmanji od njih će isplivati na kraj niza. Zbog toga se ovaj metod naziva metod mehurića. Da bi se najmanji broj nesortiranog dela niza doveo na svoje mesto treba ponoviti postupak

Primer sortira niz metodom babl sort u rasući redosled

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

/* deklaracija niza i promenljive koje se koriste*/
int a[10];
int i, j, n, pom;
/* Unos broja elemenata niza*/
cout<<„Unesi broj elemenata niza“<<endl;
cin>>n;
/*Unos elemenata niza*/
for(i=0;i<n;i++)
{
cout<<„Unesi „<<i+1<<“ element niza „;
cin>>a[i];
cout<<endl;
}
/*sortiranje- babl sort*/
for(i=n-1; i>0; i–)
{
for(j=0; j<i; j++)
{
if(a[j]>a[j+1])
{
pom=a[j];
a[j]=a[j+1];
a[j+1]=pom;
}
}
}
/*Ispis niza*/
cout<<„Niz je uredjen u rastu’em redosledu“<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<endl;
}
system(„PAUSE“);
return EXIT_SUCCESS;
}

bublesort.JPG

Metod isort

Insert sort, u svakom trenutku je početak niza sortiran a sortiranje se vrši tako što se jedan po jedan element niza sa kraja ubacuje na odgovarajuće mesto.

Primer prikazuje uređivanje niz u opadajućem redosledu metodom isort

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a[10];
int i, j, n, pom;
/* Unos broja elemenata niza*/
cout<<„Unesi broj elemenata niza“<<endl;
cin>>n;
/*Unos elemenata niza*/
for(i=0;i<n;i++)
{
cout<<„Unesi „<<i+1<<“ element niza „;
cin>>a[i];
cout<<endl;
}
/*sortiranje*/

for(i=1; i<n; i++)
{
for(j=i; (j>0) && (a[j]>a[j-1]); j–)
{

pom=a[j];
a[j]=a[j-1];
a[j-1]=pom;
}
}
/* Ispis niz*/

cout<<„Niz je uredjen u rastu’em redosledu“<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<endl;

}
system(„PAUSE“);
return EXIT_SUCCESS;
}

isort.JPG

Rešeni primeri (jednodimenzionalni nizovi)


Primer 1
: Unesi N članova niza X pomoću for petlje, a zatim ih ispiši na monitoru računara, također for petljom?

#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i,N;
int X[10];/*deklaracija niza od 10 celih brojeva*/
cout<<„Zadaj 0<N<10 = „;/*broj N mora biti manji od 10 jer je deklarisan niz od maksimalno 10 elemenata*/
cin >>N;
for (i=0;i<N;i++) /*upis članova niza*/
{
cin>>X[i]; /*upis i-tog člana niza*/
}

for (i=0;i<N;i++)               /*ispis članova niza for petljom*/
{
cout << X[i];                  /*ispis i- tog člana niza*/
cout <<endl;                  /*ispis praznog retka (end line)*/
}
system („PAUSE“);
return 0;
}

Pimer 2.

/*Program koji izdaje min element niza i njegov index*/

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int broj[5];
int min;

for (int i=0; i<5; i++)
{
cout<<„Unesi „<<i+1<<“ element niza“<<endl;
cin >> broj[i];
}

min=broj[0];

for (int i=1; i<5; i++)
{
if(broj[i]<min)
{min=broj[i];
}
}
cout << „minimalni element niza je : “ << min << „i on je“<<i<<: element niza“<< endl;
system(„PAUSE“);
return EXIT_SUCCESS;
}

Primer 3.

Program koji stvara novi niz c[10] čiji elementi su prouzvod elemenata niza a[10] i b[10]?

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int i,a[10],b[10],c[10] ;

for (int i=0; i<3; i++)
{
cout<<„Unesi „<<i+1<<“ element niza a“<<endl;
cin >> a[i];
cout<<„Unesi „<<i+1<<“ element niza b“<<endl;
cin >> b[i];
}
for (int i=0; i<3; i++)
{
c[i]=a[i]*b[i];
}
cout<<„Elementi novoformiranog niza su proizvod elemenata nizova a i b“<<endl;
for (i=0;i<3;i++)
{
cout<<a[i]<<„*“<<b[i]<<„=“<<c[i]<<endl;
}
system(„PAUSE“);
return EXIT_SUCCESS;
}

Primer 4

Napravite program koji izdaje visinu učenika koji je najviši i najmanji u razredu? Koji je njihov broj u dnevniku?

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int i,a[10], max,min;

for (int i=0; i<7; i++)
{
cout<<„Unesi visinu ucenika iji je redni broj u dnevniku „<<i+1<<endl;
cin >> a[i];
}
min=a[0];
for (int i=0; i<7; i++)
{
if(a[i]<min)
min=a[i];
}

cout<<„Najmanji ucenik ima visinu „<< min<<“ i on je sa rednim brojem „<<i<< endl;

max=a[0];

for (int i=0; i<7; i++)
{
if(a[i]>max)
max=a[i];
},

cout<<„Najveci ucenik u razredu ima visinu „<< max<<“ i on je sa rednim brojem „<<i<<endl;

system(„PAUSE“);

return EXIT_SUCCESS;
}

Primer 4.

Program koji sortira niz u rastući redosled

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

//*deklaracija niza*//
int broj[10] ;

int i,n,j,pom;
/* unos konkretne vrednosti preko tastature elemenima niza*/
cout<<„Unesi broj elemenata niza“;
cin>>n;
for(i=0;i<n;++i)
{cout<<„Unesi „<<i+1<<“ element niza“<<endl;
cin>>broj[i];
}
//*Sortiranje niza*//
for (i=0;i<n-1 ;i++)
{
for (j=i+1;j<n;j++)
{
if (broj[i]>broj[j])
{ pom=broj[i];broj[i]=broj[j];broj[j]=pom;

}
}
}
//*prikaz elemente niza-njih
ove konkretne vrednosti*//
cout<<„Uredjeni nizn“<<endl;
for (i=0;i<n;i++)
{
cout<<broj[i]<<endl;

}
system(„PAUSE“);
return EXIT_SUCCESS;
}

Program 5.

Program koji sumira elemente niza sa parnim i neparnim indeksima

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
//* Program koji sumaira elemente niza sa parnim i neparnim indeksima*//

/*deklaracija niza*/
int broj[5] ;
{
int i,sp=0,sn=0;

/* unos konkretne vrednosti preko tastature elemenima niza*/
for(i=0;i<5;++i)
{

cout<<„Unesi broj[„<<i+1<<„] „;
cin>>broj[i];
if ((i%2)==0)
sp+=broj[i];
else
sn+=broj[i];
}

cout<<„suma elemenata niza sa parnim indeksima je „<<sp<<endl;
cout<<„suma elemenata niza sa neparnim indeksima je „<<sn<<endl;

}
system(„PAUSE“);
return EXIT_SUCCESS;
}

Primer 6.

Dat je niz od 10 realnih brojeva. Naći broj najbliži nuli i broj najdalji od nule?

Rešenje:

/* 23010560 Dat je niz od 10 realnih brojeva. 
Naći broj najbliži nuli i broj najdalji od nule.*/
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{float a[10]={2, 3, 15, -14, -12.5, -1.5, 0.2, 11, -25, 4}, najb, najd;
 najb=a[0];
 najd=a[0];
 for (int i=1; i<10;i++)
     {if (abs(a[i])< abs(najb)) najb=a[i]; 
      if (abs(a[i]) > abs(najd)) najd=a[i];
      }
 cout << "Najblizi nuli je " << najb << endl;
 cout << "Najdalji od nule je " << najd << endl;     
 system("PAUSE");
 return EXIT_SUCCESS;
}
Primer 7.
Učitati 2 cela broja. Kreirati niz od 10 slučajnih celih brojeva između njih. Učitati treći broj i odrediti koji je član niza najbliži tom broju?
Rešenje:

#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{   int x[10], a, b, c, najb, nraz=INT_MAX;
    srand(time(NULL));
    rand();
    cin >>a >>b;
    if (a>b) swap(a, b);
    for (int i=0; i<10;i++) 
        {x[i]=rand()%(b-a-2)+a+1;
         cout << x[i] << "  ";
        }
    cin >>c;
    for (int i=0; i<10;i++) 
        if (abs(x[i]-c) < nraz) {najb=i; nraz=abs(x[i]-c);}
    cout << "Najblizi je a["<< najb<< "]= " << x[najb] << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Primer8. Napravite program koristeći funkcije, za izračunavanja sumu elemenata niza čije se vrednosti unose preko tastature?
Rešenje.

#include <cstdlib>

#include <iostream>

using namespace std;
int nizsuma(int n)
{
int i, a[n],s;
for (i=0;i<n;i++)
{
cout<<“ Unesi „<<i+1<<“ element niza“<<endl;
cin >> a[i];
s+=a[i];
}
return s;
}

int main(int argc, char *argv[])
{
int n;
cout<<„Unesi broj elemenata niza“<<endl;
cin>>n;

cout <<“ Suma svih elemenata niya je:“<<nizsuma(n)<<endl;
system(„PAUSE“);
return EXIT_SUCCESS;
}