Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] merge sort

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78

    [C] merge sort

    Salve questo è il codice dell'algoritmo di merge sort,non capisco che significa passare alla funzione merge un vettore più una costante m..non ne capisco il senso....cioè:

    codice:
    merge_sort (a+m , n -m , temp );
    codice:
    void merge_sort ( TInfo a [] , int n, TInfo temp []) {
        int i, m=n /2;
        if (n <2)
            return;
        merge_sort (a , m , temp );
        merge_sort (a+m , n -m , temp );
        merge (a , m , a+m , n -m , temp );
        for(i =0; i <n; i ++)
            a[i ]= temp [i ];
    }
    Ultima modifica di MItaly; 30-05-2014 a 00:27 Motivo: Fix codice

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    La costante senza senso è l'elemento pivot.

    La teoria che sta dientro al merge sort la conosci?

    http://en.wikipedia.org/wiki/Merge_sort
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    grz alex..sei sempre gentile...facciamo prima se ti dico la parte che non capisco dal mio testo:

    la seconda chiamata ricorsiva(quella in questione) ordina la seconda parte dell'array-Si noti che in questo caso come array da ordinare viene passato a+m che in base alla regole dell'aritmetica dei puntatori corrisponde all'indirizzo dell'elemento a[m],(??)il primo elemento della seconda parte di a(ricordiamo che in c gli array sono sempre passati per riferimento, e il parametro effettivo corrisponde all'indirizzo del primo elemento dell'array.....

    sta forse cercando di dirmi che attraverso questo m riesco ad incrementare il riferimento della prima cella di memoria e passare di cella in cella....

    tu che ne pensi..io non capisco..

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    a+m corrisponde a &a[m]

    In sostanza passa la seconda metà dell'array.

    Il mergesort infatti funziona dividendo a metà l'array fino a giungere ad avere un solo elemento e poi ricomponendoli ordinatamente. (merge)
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2025 vBulletin Solutions, Inc. All rights reserved.