Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Programmazione
 Merge Sort
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Dr House
Utente medio

Città: Bari


Inserito il - 09/01/2008 : 15:22:20  Mostra Profilo  Visita l'Homepage di Dr House Invia a Dr House un Messaggio Privato  Rispondi Quotando
Cerco disperato qualcuno che mi possa aiutare con l'algoritmo merge sort. Sintatticamente è corretto ma non mi restituisce il vettore ordinato bensi il vettore come è all'inizio. Ho pensato che forse c'è qualche errore nella copiatura dal vettore c al vettore a o nella visualizzazione ma non riesco a venirne a capo.
C'è qualcuno che riesce a capire dov'è l'errore.
Tra l'altro il controllo non arriva all'ultima riga della funzione merge o cosi mi sembra. Aiutatemi...please

#include<stdio.h>
#define DIM 20
int leggi_num(int *);
void leggi_vet(int [],int );
void visualizza_vet(int [],int );
void msort (int[],int ,int );
void merge (int[],int,int,int);
int main()
{
int a[DIM];
int n;
int i,j;
printf("Inserire il numero delle componenti del vettore\n");
leggi_num(&n);
printf("Inserire le %d componenti del vettore\n", n);
leggi_vet(a,n);
printf("Il vettore digitato e'\n");
visualizza_vet(a,n);
printf("\n");
i=0; j=n-1;
msort(a,i,j);
printf("Il vettore ordinato e'\n");
visualizza_vet(a,n);



system("pause");
return 0;
}
int leggi_num(int *x)
{
scanf("%d",x);
}
void leggi_vet(int x[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&x[i]);
}
void visualizza_vet(int x[],int m)
{
int i;
for(i=0;i<m;i++)
printf("%d ",x[i]);
}
void msort (int x[],int i,int j)
{ // ordina le componenti di x comprese tra x[i] e x[j]
// m indice dell'elemento centrale
int m,n,t;
if (i+1==j) // caso assiomatico-il vettore ha solo 2 componenti
{
if (x[i]>x[j])
{ t=x[i];
x[i]=x[j];
x[j]=t;
}
else
{ if(i+1<j) // il vettore ha più di due componenti
{ m=(i+j)/2;
msort(x,i,m);
msort(x,m+1,j);
merge(x,i,m,j);
} // se (i+1>j il vettore ha un solo elemento
}
}
}
void merge (int a[],int inf,int med,int sup)
{ // fusione dei vettori di indici inf...med; med+1...sup
int c[70]; // vettore di lavoro
int i,j,k;
i=inf;j=med+1;k=inf; // inizializza i,j,k
while ((i<=med)&&(j<=sup))
{ if (a[i]<=a[j]) // confronta a[i] e a[j]
{ c[k]=a[i];
i++;
k++;
}

else
{ c[k]=a[j];
j++;
k++;}
}
// completa il vettore c con gli elementi restanti di a
while(i<=med)
{ c[k]=a[i];
i++;
k++;
}
// completa il vettore c con gli elementi restanti di b
while(j<=sup)
{ c[k]=a[j];
j++;
k++;
}

// copia gli elementi di c in a
for(k=inf;k<=sup;k++)
a[k]=c[k];

printf("vettore c\n");
visualizza_vet(c,k);
}

"La realtà è fatta di cose vere e cose supposte.
Le cose vere le mettiamo da parte, ma le supposte dove le mettiamo?"

giaefre
Nuovo Utente



Inserito il - 25/01/2008 : 18:03:48  Mostra Profilo  Visita l'Homepage di giaefre Invia a giaefre un Messaggio Privato  Rispondi Quotando
Ti so dire per certo che questo algoritmo funziona....
--header : void unisciarray(int array1[] , int array2[] , int arraytot[]);
--procedura:
void unisciarray( int array1[] , int array2[] , int arraytot[])

{ int i=0 ,j=0,c=0;

while ((i < size) && (j < size)) {

if (array1[i] < array2[j])

{ arraytot[c] = array1[i] ; c++ ; i++ ;}

else

{ arraytot[c] = array2[j] ; c++ ; j++ ;} }

while (i < size)

{ arraytot[c] = array1[i] ; i++ ; c++; }

while (j < size)

{ arraytot[c] = array2[j] ; j++ ; c++; }

}

Spero di esserti stato d'aiuto seppur in minima parte
p.s la prossima volta...indenta !
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,19 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000