Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    quiksort

    Ciao raga!!
    qualcuno mi puo dare una mano????


    qualcuno mi sa dire dove sbaglio???

    devo riordinare il vettore tramite quicksort ma quando evoco ricorsivamente questa funzione ottengo una ricorsione infinita!!! devo per forza usare la ricorsione e la funzione part serve per trovare la posizione definittiva deglie elemnti del vettore e mi rende il valore chiave...



    #include <stdio.h>
    #define SIZE 10

    int part ( int v[], int inf, int sup);
    void scrivi (int v[], int Grd);
    void scambia ( int v[], int primo, int secondo);
    void Qsort ( int v[], int inf , int sup);
    int main () {

    int v[SIZE] = { 1,2,7,4,34,8,54,56,6,76};

    scrivi(v,SIZE);
    printf("\n\n\n");
    Qsort(v,0,SIZE-1);
    system ( "PAUSE");
    return 0 ;


    }

    int part ( int v[], int inf, int sup){

    int i= inf, j = sup, Vc= (inf+sup)/2, temp,x;
    printf("Numero cercato %d\n", v[Vc]);
    for (;;) {

    if ( i >j) break;

    // da sinistra
    while ( v[i]< v[Vc]) i++; printf(" valore i %d\n", i);
    scambia(v, Vc, i);
    temp = i;
    i = Vc;
    Vc=temp; // nuova posizione
    printf(" valore vc :%d\n", Vc);
    scrivi(v, SIZE);

    printf("\n\n");

    if ( i >j) break;


    while ( v[j]>v[Vc]) j--; printf("valore j :%d\n", j);
    scambia(v, Vc, j);
    temp = j;
    j = Vc;
    Vc=temp; // nuova posizione

    printf(" valore vc %d\n", Vc);
    scrivi(v, SIZE);
    if ( j<i) break;
    }


    return Vc;

    }



    void scambia ( int v[], int Pprimo, int Psecondo){

    int temp = v[Pprimo];
    v[Pprimo] = v[Psecondo];
    v[Psecondo] = temp;

    printf("viviv!");
    }



    void scrivi (int v[], int Grd){

    int i = 0;

    for ( i=0; i<Grd; i++)
    printf("%d ", v[i]);

    }

    void Qsort ( int v[], int inf , int sup){


    int sentinella = part(v, inf, sup);


    printf("il valore sentinella e :%d", sentinella);

    if ( sentinella +1 <sup) Qsort( v, sentinella +1, sup);
    if ( sentinella - 1>inf) Qsort( v,inf, sentinella-1);




    }

  2. #2
    Scusa ma non è meglio farlo cosi

    codice:
    #include <algorithm>
    #include <iterator>
    #include <functional>
    
    template <typename T>
    void sort(T begin, T end) {
        if (begin != end) {
            T middle = partition (begin, end, bind2nd(
                    less<iterator_traits<T>::value_type>(), *begin));
            sort (begin, middle);
            sort (max(begin + 1, middle), end);
        }
    }

  3. #3
    non ho capito neanche la meta del codice che hai scritto!!!

    sono molto ignorante

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482

    Moderazione

    Originariamente inviato da PeppePes88
    Ciao raga!!
    qualcuno mi puo dare una mano????
    qualcuno mi sa dire dove sbaglio???
    Ueh raga, manca il linguaggio nel titolo.

    Qui lo aggiungo io, la prossima volta ricordatelo (anche una descrizione significativa del problema non sarebbe male...).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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