Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c] mergesort

  1. #1

    [c] mergesort

    qualcuno sa dirmi xk non mi ordina niente???
    l'errore è sicuramente nella parte in grassetto (inserita xkè il prof vuole che si traduca fedelmente il prog dal Pascal in C).

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    #define MAX 300
    
    
    /*
     *  Funzione Merge per la fusione di due
     *  componenti ordinate dell'array.
     */
    
    void Merge(int A[], int primo, int mezzo, int ultimo) {
      int i, j, k, h, B[MAX];
    
      i = primo;
      j = mezzo+1;
      k = 0;
      while (i <= mezzo && j <= ultimo) {
        if (A[i] < A[j]) {
          B[k] = A[i];
          i++;
        } else {
          B[k] = A[j];
          j++;
        }
        k++;
      }
    
      if (i <= mezzo) {
        j = ultimo - k;
        for (h=j; h>=0; h--) 
          A[k+h] = A[i+h];
        for (j=primo; j<k-1; j++)
          A[j] = B[j];
        return;
      }
     }
    
    
    
    /*
     *  Funzione ricorsiva MergeSort.
     */
    
    void MergeSort(int A[], int primo, int ultimo) {
      int q;
    
      if (primo < ultimo) {
        q = (primo+ultimo)/2;
        MergeSort(A, primo, q);
        MergeSort(A, q+1, ultimo);
        Merge(A, primo, ultimo, q);
      }
      return;
    }
    
    
    /*
     *  Funzione principale
     */
    
    int main() 
      {
        int *vet, n, i;
        
        printf("Quanti elementi vuoi inserire nell'array?: ");
        scanf("%d", &n);
        printf("\n");
        
        vet = (int *) malloc (n*sizeof(int));
    
        for(i = 0; i < n; i++)
          {
            printf("Inserisci il %d elemento dell'array: ", i+1);
            scanf("%d", &vet[i]);
          }
    
        printf("\nGli elementi inseriti nell'array sono: ");
          
        for(i = 0; i < n; i++)
          printf("%d ", vet[i]);
    	
        printf("\n");
    
        MergeSort(vet, 0, n-1);
    
        printf("\nL'array ordinato e' il seguente: ");
        
        for(i = 0; i < n; i++)
            printf("%d ", vet[i]);
        printf("\n\n");
        system("pause");
        return 0;
     }

    se al posto di quel codice inserisco il seguente, il prog funziona, ma vorrei capire qual è l'errore che faccio nel precedente.
    codice:
    while (i <= mezzo) {
          B[k] = A[i];
          i++;
          k++;
        }
      } else {
        while (j <= ultimo) {
          B[k] = A[j];
          j++;
          k++;
        }
      }
      for (k = primo; k <= ultimo; k++)
        A[k] = B[k - primo];
    grazie.
    @@@

  2. #2
    nulla?
    @@@

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.