|
|||||||
|
|
|
![]() |
|
|
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: 1376
|
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: 1376
|
Edit: commento non più necessario
Ultima modifica di monte.cristo : 29-10-2014 alle 12: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: 06:22.




















