Trasformare l heap sort in un soft heap minimo

di il
4 risposte

Trasformare l heap sort in un soft heap minimo

Programmazione c heap sort heap minimo?

ciao a tutti qualcuno di voi riuscirebbe a trasformarmi il seguente codice dell'heap sort in un programma che crea un heap minimo grazie con le seguenti caratteristiche:
1 creare un heap minimo
2 eliminare un campo chiave con il valore più piccolo
3cambiare la priorità di un elemento arbitrario
inserire un elemento nell'heap e visualizzare l 'heap

#include <stdlib.h>
#include <stdio.h>

#define MAX 300


/*
* Scambia: scambia il valore delle due variabili.
*/

void scambia(int *x, int *y) {
int z;

z = *x;
*x = *y;
*y = z;
return;
}


/*
* Legge in input il numero n ed n numeri interi
* che memorizza nell'array. Restituisce il numero
* di elementi letti (n).
*/

int leggi_array(int V[]) {
int n, i;

printf("Numero di elementi: ");
scanf("%d", &n);
printf("Inserisci %d numeri: ", n);
for (i=0; i<n; i++)
scanf("%d", &V);
return(n);
}


/*
* Stampa in output l'array.
*/

void stampa_array(int V[], int n) {
int i;

for (i=0; i<n; i++) {
printf("%d ", V);
}
printf("\n");
return;
}


/*
* Inserisci: inserisce l'elemento x nell'heap H.
*/

void Inserisci(int x, int H[]) {
int l;

l = H[0]+1;
H[0] = H[0]+1;
H[l] = x;
while (l>1 && H[l/2]<H[l]) {
scambia(&H[l], &H[l/2]);
l = l/2;
}
return;
}


/*
* EstraiMax: restituisce il massimo elemento
* dell'heap H (la radice) e ricostruisce la
* struttura di heap.
*/

int EstraiMax(int H[]) {
int max, l, i;

max = H[1];
l = H[0];
H[1] = H[l];
l = l-1;
H[0] = H[0]-1;
i = 1;
while (2*i<=l && (H<H[2*i] || H<H[2*i+1])) {
if (H[2*i] > H[2*i+1]) {
scambia(&H, &H[2*i]);
i = 2*i;
} else {
scambia(&H, &H[2*i+1]);
i = 2*i+1;
}
}
return(max);
}


/*
* HeapSort: ordina l'array A mediante l'algoritmo Heap Sort.
*/

void HeapSort(int A[], int n) {
int i, H[MAX];

H[0] = 0;
for (i=0; i<n; i++)
Inserisci(A, H);
for (i=n-1; i>=0; i--)
A = EstraiMax(H);
return;
}


/*
* Funzione principale
*/

int main(void) {
int n, V[MAX];

n = leggi_array(V);
HeapSort(V, n);
stampa_array(V, n);
return(1);
}

4 Risposte

  • Re: Trasformare l heap sort in un soft heap minimo

    Cosa centra un algoritmo di ordinazione con una struttura dati?
    Puoi cercare di mettere il tuo codice tra i tag code così possiamo capire cosa fa?

    Ecco un aiutino su come creare un min-heap.
    http://it.wikipedia.org/wiki/Heap_binari
  • Re: Trasformare l heap sort in un soft heap minimo

    Devo modificare il software per l'ordinamento heap sort che vi ho fornito in un software che ha le caratteristiche che vi ho scritto in precedenza. il software che vi ho dato prende gli elementi e li restituisce secondo l'ordinamento heap sort. a me serve un software che restituisce un heap minimo
  • Re: Trasformare l heap sort in un soft heap minimo

    A me basterebbe anche un software che svolge queste funzioni
    1 creare un heap minimo
    2 eliminare un campo chiave con il valore più piccolo
    3cambiare la priorità di un elemento arbitrario
    inserire un elemento nell'heap e visualizzare l 'heap
  • Re: Trasformare l heap sort in un soft heap minimo

    Ti ripeto:
    1. Riordina il tuo codice e mettilo tra tag code. Solo così possiamo capire il codice scritto da te.
    2. L'heap sort crea già un heap minimo prima di eseguire l'ordinamento. Se non sai questo (e non lo sai) mi viene da pensare che il codice del heap sort non è scritto da te se no non facevi certe richieste.
    3. Se leggi il regolamento te ne accorgerai che non svolgiamo compiti, ma aiutiamo le persone a svolgere i suddetti compiti.
Devi accedere o registrarti per scrivere nel forum
4 risposte