U praksi, radi se o izdvajanju razlicitih brojeva na pocetak niza.
Dakle, funkcija
izdvajanje_razlicitih izdvaja jedinstvene vrednosti na POCETAK NIZA, a kao rezultat vraca GRANICU do koje su ti brojevi izdvojeni, tako da znas koji su to brojevi.
To je jedan od mogucih algoritama, a ti ga prilagodi svojim potrebama.
Code:
#include <stdio.h>
#include <stdlib.h>
#define BROJ_ELEMENATA 10
void swap( int *a, int *b )
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int izdvajanje_razlicitih( int niz[], int elemenata )
{
int kandidat, uredjeni, uslov, granica=1;
for ( kandidat=granica; kandidat<elemenata; kandidat++ )
{
uslov=1; /* optimisticki */
for ( uredjeni=0; uredjeni<granica; uredjeni++ )
{
if ( niz[kandidat]==niz[uredjeni] )
{
uslov=0; /* vec postoji u uredjenima */
break;
}
}
if ( uslov==1 ) /* kandidat prelazi u uredjene */
{
swap( &niz[kandidat], &niz[granica] );
++granica;
}
}
return( granica );
}
int main()
{
int x;
//int niz[BROJ_ELEMENATA] = {1,2,1,1,2,1,2,3,4,1};
//int niz[BROJ_ELEMENATA] = {1,1,1,1,1,1,1,2,3,1};
//int niz[BROJ_ELEMENATA] = {1,2,3,4,5,6,7,8,9,10};
//int niz[BROJ_ELEMENATA] = {1,2,3,4,5,6,2,8,9,10};
int niz[BROJ_ELEMENATA] = {1,2,1,2,1,2,1,2,1,2};
printf( "ORIGINAL:\n" );
for ( x=0; x<BROJ_ELEMENATA; x++)
printf( "%d\t", niz[x] );
printf( "\n\n" );
printf( "GRANICA RAZLICITIH:%d\n\n", izdvajanje_razlicitih( niz, BROJ_ELEMENATA ) );
printf( "UREDJEN\n" );
for ( x=0; x<BROJ_ELEMENATA; x++ ) // ovde recimo mozes da petlju skratis da ispisuje samo do GRANICE, tj do povratne vrednosti funkcije
printf( "%d\t", niz[x] );
printf( "\n\n" );
return 0;
}