Gå til innhold

Template for liste?


Anbefalte innlegg

Det ble en funksjon som dette:

void storenode(Individ Ind){
Individ Temp[size] = {0}; //Lager en array av Node-objekter initialisert til 0.
int k,l, i=0, j=0;
while (I[i].a > Ind.a) i++;
if (I[i].a == Ind.a) i++; 
l=i;
for (k=i; k<size-l; k++){ //copy remaining elements to Temp[]
	Temp[j]=I[k];
	j++;
}
I[i] = Ind; i++; j=0;
for (i; i<size; i++){ //copy back to I[]
	I[i]=Temp[j];
	j++;
}

}

 

Noen ting som fort kan bli bugs i koden din:

while (I[i].a > Ind.a) i++;

Legg til en sjekk på at i < size, dermed slipper du å gå out of bounds.

 

for (k=i; k<size-l; k++){ //copy remaining elements to Temp[]

hvorfor size-1?

om arrayet er deklarert som a trenger du ikke -1 i for løkka her, for k går allerede innenfor grensene. (effektivt allokerer du da en plass som du aldri bruker).

 

 

Et lite tips for å effektivisere koden din:

- lista er allerede sorteret, så du trenger i grunn ikke den temp variablen din.

- om du søker fra bakerst i lista og fremover, og hver gang plassen ikke passer, flytter elementet en bakover i arrayet ditt, må du bare skifte om på halve arrayet uten noe temp dilldall (bør kjøre mer effektivt)

 

noa ala:

NB! pass på her at size+1 er en allokert størrelse!

#define MAXSIZE 500
Individ I[MAXSIZE];
//assert(MAXSIZE> (size+1));
void storenode(Individ Ind)
{
int previous = size+1;
int i = size;
for (; i > 0; i--)
{  
 if (I[i].a > Ind.a)
 {
   I[previous] = I[i];
 }
 previous = i;
}

if (I[i].a > Ind.a)
{
 I[previous] = I[i];
 I[0] = Ind;
}
else
{
 I[previous] = Ind;
}

}

Lenke til kommentar
Videoannonse
Annonse

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...