Trasformare l heap sort in un soft heap minimo

di Anonimizzato11144 il
4 risposte
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

  • 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
  • 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
  • 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
  • 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