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

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
Dr House Inserito il - 09/01/2008 : 15:22:20
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);
}
1   U L T I M E    R I S P O S T E    (in alto le più recenti)
giaefre Inserito il - 25/01/2008 : 18:03:48
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 !

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,04 secondi.

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