PDA

View Full Version : [C] Funzione che ordina vettore


Ir0nM4id3n84
24-11-2004, 23:21
Ciao,
ho scritto un programma in C che dato un vettore richiama una funzione che lo ordina mediante l'algoritmo BubleSort e stampa il risultato del vettore ordinato.

Il programma funziona e il vettore viene ordinato ma quando lo stampa vengono stampati anche una serie di numeri strani vicino al primo elemento e non capisco proprio il perchè....

#include <stdio.h>
#define SIZE 15

void ordinaBublesort(int[], int); /* La funzione per ordinare il vettore ha come parametri il puntatore all'indirizzo di
memoria in cui inizia il vettore e la dimensione del vettore stesso */

int main(void){

int vettore[SIZE] = {2,77,31,53,44,1,5,0,33,19,48,86,51,38,21};
int i;

printf("Contenuto di un vettore di interi formato da 15 elementi prima di essere ordiato:\n");

for(i = 0; i < SIZE; i++) // Stampo il vettore prima che venga ordinato dalla funzione ordinaBublesort
printf("%3d", vettore[i]);

ordinaBublesort(vettore, SIZE); // Chiamo la funzione e gli passo il puntatore al vettore e la sua dimensione

return 0;
}


void ordinaBublesort(int array[], int size){

int i, passo, temp;

for(passo = 1; passo < size; passo++){ // Ciclo dei passaggi

for(i = 0; i < size; i++){ // Ciclo per ogni singolo passaggio

if(array[i] > array[i+1]){ // Confronto tra ogni coppia di posizioni adiacenti
temp = array[i]; // Memorizza il valore da spostare avanti nella variabile temporanea
array[i] = array[i+1]; // Scambia il valore
array[i+1] = temp; // Ripristina alla giusta locazione del vettore il valore salvato in temp
}
}
}

printf("\n\n\n Contenuto del vettore di interi dopo essere stato ordinato dalla funzione ordinaBublesort:\n");

for(i = 0; i < size; i++)
printf("%3d", array[i]);
}


Grazie

[-(-[F@bio]-)-]
25-11-2004, 03:02
#include <stdio.h>
#define SIZE 15

void ordinaBublesort(int[], int); /* La funzione per ordinare il vettore ha come parametri il puntatore all'indirizzo di
memoria in cui inizia il vettore e la dimensione del vettore stesso */

int main(void){

int vettore = {2,77,31,53,44,1,5,0,33,19,48,86,51,38,21};
int i;

printf("Contenuto di un vettore di interi formato da 15 elementi prima di essere ordiato:\n");

for(i = 0; i < SIZE; i++) // Stampo il vettore prima che venga ordinato dalla funzione ordinaBublesort
printf("%3d", vettore[i]);

ordinaBublesort(vettore, SIZE); // Chiamo la funzione e gli passo il puntatore al vettore e la sua dimensione

return 0;
}


void ordinaBublesort(int array[], int size){

int i, passo, temp;

for(passo = 1; passo < size; passo++){ // Ciclo dei passaggi

for(i = 0; i < size [SIZE=4] -1 ; i++){ // Ciclo per ogni singolo passaggio

if(array[i] > array[i+1]){ // Confronto tra ogni coppia di posizioni adiacenti
temp = array[i]; // Memorizza il valore da spostare avanti nella variabile temporanea
array[i] = array[i+1]; // Scambia il valore
array[i+1] = temp; // Ripristina alla giusta locazione del vettore il valore salvato in temp
}
}
}

printf("\n\n\n Contenuto del vettore di interi dopo essere stato ordinato dalla funzione ordinaBublesort:\n");

for(i = 0; i < size; i++)
printf("%3d", array[i]);
}


Grazie [/QUOTE]

partendo da 0 col contatore ti devi fermare un elemento prima che il tuo array finisca,altrimenti sfori l'array all'ultimo controllo e vai fuori nell'elemento i+1=15 e quindi guardi fuori dall'array in una parte di memoria che poteva contenere qualunque cosa
:sofico:

Ir0nM4id3n84
25-11-2004, 10:46
ahhh giusto, mi dimentico sempre di inserire qualche cavolata che poi mi incasna tutto, quindi quel numero storto che mi appariva era semplicemente il contenuto di una cella di memoria fuori dal mio array?

Grazie
Andrea