PDA

View Full Version : [C] insertion sort


Starise
12-01-2005, 01:49
Ciao a tutti!
Scusate, ma avrei bisogno urgente di una cosa:

Ho bisono per domani alle 14 di un programma in C che richiama una funzione void che ordina un array tramite insertion sort!

ho provato a fare un programma... ma non mi funziona... potete aiutarmi a scovare gli errori? grazie!



#include <stdio.h>
#include <malloc.h>

void insertion_sort(int a[], int n);
main()
{

int *a;
int i;
int n;

printf("Inserisci la quantità di numeri da esaminare\n");
scanf("%d", &n);

a=(int*)malloc(n*sizeof(int));

for (i=1; i<n; i++)
{

printf("inserire un numero\n");
scanf("%d", &a[i]);

}
insertion_sort(a,n);

printf("\nArray Ordinato:");

for (i=0;i<n;i++)

{

printf("%d",a[i]);

}

free (a);

}

void insertion_sort(int a[], int n) {

int i, j, app;

for (i=1; i<n; i++) {
app = a[i];
j = i-1;
while (j>=0 && a[j]>app) {
a[j+1] = a[j];
j--;
}
a[j+1] = app;
}

return;

}

Ziosilvio
12-01-2005, 10:49
Originariamente inviato da Starise
un programma in C che richiama una funzione void che ordina un array tramite insertion sort
L'array deve esserci già, o devi usare insertion sort per inserire i valori nell'array in modo che, a ogni inserimento, l'array rimanga ordinato?
Perché l'uso "vero" sarebbe quello... comunque, diciamo che siamo nella prima ipotesi.
ho provato a fare un programma... ma non mi funziona... potete aiutarmi a scovare gli errori?
Se ci dici anche che errori dà, ti possiamo aiutare meglio.
A proposito: quando inserisci di programma, usa il tag "code", altrimenti perdi l'indentazione. Così:
printf("Inserisci la quantità di numeri da esaminare\n");
scanf("%d", &n);
Qui dovresti accertarti che la scanf abbia avuto successo... va beh, diciamo che l'utente ha fatto il bravo...
a=(int*)malloc(n*sizeof(int));
Errore classico da principiante: quando allochi memoria dinamicamente, devi sempre accertarti che l'allocazione abbia avuto successo.
Leggi il manuale (o la man page di malloc) per capire come si fa.
for (i=0;i<n;i++)
{
printf("%d",a[i]);
}
Se usi la printf così, ti vengono i numeri tutti attaccati.
La stringa di formato dovrebbe essere " %d", con lo spazio all'inizio.

Per il resto.. boh, sembra tutto a posto... prova a fare queste modifiche e facci sapere cosa esce fuori.