Ciao a tutti!
Premetto che ho iniziato da poco a studiare il linguaggio di programmazione C, però sono a conoscenza delle basi fondamentali per capire un semplice codice.
Ho un problema con il codice che dovrebbe effettuare l'insertion sort di alcuni valori di input forniti dall'utente. Il codice è il seguente:
Se per esempio inserisco i valori "2 9 1 4 3 6" l'output finale mi restituisce "0 0 0 0 0 0" invece di "1 2 3 4 6 9".
Non capisco dov'è il problema e quali siano gli errori.
Qualcuno può aiutarmi?
Grazie.
Premetto che ho iniziato da poco a studiare il linguaggio di programmazione C, però sono a conoscenza delle basi fondamentali per capire un semplice codice.
Ho un problema con il codice che dovrebbe effettuare l'insertion sort di alcuni valori di input forniti dall'utente. Il codice è il seguente:
C:
/*
* codice per insertion sort
* descrizione: https://it.wikipedia.org/wiki/Insertion_sort
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX_INPUT 10
void estrai_dati(int ac, char **av, int *vett, int *lung)
{
*lung = ac - 1;
for (int i = 0; i < *lung; ++i)
vett[i] = atoi(av[i+1]);
}
void fai_spazio(int posizione, int *vett, int lung)
{
for (int j = lung - 1; j > posizione; ++j)
vett[j] = vett[j-1];
}
void inserisci(int nuovo_dato, int num_dati_ord, int *vett)
{
if (num_dati_ord = 0) { // il vettore è vuoto, facile
vett[0] = nuovo_dato;
return;
}
for (int i = 0; i < num_dati_ord; ++i) {
if (nuovo_dato < vett[i]) {
// sposta da vett[i] in poi di un posto sulla destra
// prima di inserire il nuovo_dato
fai_spazio(i, vett, num_dati_ord);
vett[i] = nuovo_dato;
return;
}
}
}
void ordina_dati(const int *dati_non_ordinati, int *dati_ordinati)
{
int num_dati = sizeof(dati_non_ordinati) / sizeof(dati_non_ordinati[0]);
for (int i = 0; i < num_dati; ++i)
inserisci(dati_non_ordinati[i], i, dati_ordinati);
}
void stampa_vettore(const int *vett, int lung)
{
for (int i = 0; i < lung; ++i)
printf("%d ",vett[i]);
printf("\n");
}
int main(int argc, char **argv)
{
if (argc > MAX_INPUT + 1) {
printf("Numero massimo di input %d\n", MAX_INPUT);
return -1;
}
int dati_input[MAX_INPUT] = {0};
int dati_ordinati[MAX_INPUT] = {0};
int num_dati = 0;
estrai_dati(argc, argv, dati_input, &num_dati);
ordina_dati(dati_input, dati_ordinati);
stampa_vettore(dati_ordinati, num_dati);
return 0;
}
Se per esempio inserisco i valori "2 9 1 4 3 6" l'output finale mi restituisce "0 0 0 0 0 0" invece di "1 2 3 4 6 9".
Non capisco dov'è il problema e quali siano gli errori.
Qualcuno può aiutarmi?
Grazie.