|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2014
Messaggi: 4
|
Bubble Sort di una struttura con puntatori
Devo acquisire una serie di coordinate ed allocarle dinamicamente in una struct, quindi ordinarle in maniera decrescente secondo la distanza del punto dall'origine 0 0.
Ho provato ad usare un Bubble sort ma non funziona ![]() #include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct { int x, y; float d_o; } punto; int main() { FILE *f1; int i, j, end=0, tempx, tempy; float tempd_o; punto *p, *p2; f1=fopen("punti.txt","r"); if (f1==NULL) { printf("Errore nell'apertura del file.\n"); return 0; } fscanf(f1,"%d", &end) p=malloc(end*sizeof(punto)); if(p==NULL) { printf("Errore allocazione memoria.\n"); return 0; } p2=p; for(i=0;i<end;i++) { fscanf(f1,"%d %d", &p2->x, &p2->y); p2->d_o=sqrt((p2->x*p2->x)+(p2->y*p2->y)); p2++; } fclose(f1); //Bubble sort for(i=0;i<end-1;i++) { for(j=0;j<end-i;j++) { if(p[j].d_o<p[j+1].d_o) { tempx=p[j].x; p[j].x=p[j+1].x; p[j+1].x=tempx; tempy=p[j].y; p[j].y=p[j+1].y; p[j+1].y=tempy; tempd_o=p[j].d_o; p[j].d_o=p[j+1].d_o; p[j+1].d_o=tempd_o; } } } return 0; } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
deve essere -1, non -i:
Codice:
for(j=0;j<end-1;j++)
__________________
In God we trust; all others bring data |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2014
Messaggi: 1368
|
Un paio di cose:
1) Dichiari p e p2 che di fatto puntano alla stessa area di memoria, ma dal codice che hai postato uno dei due non sembra necessario 2) L'algoritmo bubble sort è praticamente standard. Questo è lo pseudocodice della versione ottimizzata presa di wikipedia Codice:
procedure BubbleSort( A : lista di elementi da ordinare) alto ← lenght(A) - 1 while (alto > 0) do for i ← 0 to alto do if (A[i] > A[i + 1]) then //scambiare il '>' con '<' per ottenere swap ( A[i], A[i+1] ) // un ordinamento decrescente alto ← alto - 1 |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Codice:
p2=p; for(i=0;i<end;i++) { fscanf(f1,"%d %d", &p2->x, &p2->y); p2->d_o=sqrt((p2->x*p2->x)+(p2->y*p2->y)); p2++; }
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2014
Messaggi: 1368
|
Edit: commento non più necessario
Ultima modifica di monte.cristo : 29-10-2014 alle 11:25. |
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Oct 2014
Messaggi: 4
|
Ho risolto
Grazie a tutti per le risposte!
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:12.