Problema con programma ordinamento

di il
6 risposte

Problema con programma ordinamento

Salve a tutti, sto imparando a programmare in C e ho provato a scrivere un programma che metta in ordine N numeri acquisiti da tastiera, il problema è che qualunque numero si immetta il risultato sono N numeri negativi di 10 cifre (ordinati!) ... qualcuno può aiutarmi?
grazie in anticipo


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

#define MAX 10

main () {

int data[MAX], NUM=1, i, j, base;

do {

if(NUM >= MAX || NUM <= 0) {

printf("numero non valido, inserisci un numero compreso fra 1 e %d: ", MAX-1);
scanf("%d", &NUM);

}

else {

printf("Inserisci il numero degli elementi da ordinare: ");
scanf("%d", &NUM);

}
}

while (NUM >= MAX || NUM <= 0);

for (i = 0; i < NUM; i++) {
printf("Inserisci l'elemento numero %d: ", i+1);
scanf("%d", &data);

}

for (i = 0; i < NUM-1; i++) {
for (j = 0; j < NUM-1-i; j++) {
if (data[j] > data[j+1]) {
base = data[j];
data[j] = data[j+1];
data[j+1] = base;
}
}
}

printf("I numeri ordinati sono: ");

for (i = 0; i < NUM; i++) {
printf(" %d ", &data);

}

printf("\n");
printf("\n");

}

6 Risposte

  • Re: Problema con programma ordinamento

    Usa l'algoritmo bubblesort

    void bubblesort(int v[], int n) {
    int i,k;
    int temp;
    for(i = 0; i<n-1; i++) {
    for(k = 0; k<n-1-i; k++) {
    if(v[k] > v[k+1]) {
    temp = v[k];
    v[k] = v[k+1];
    v[k+1] = temp;
    }
    }
    }
    }

  • Re: Problema con programma ordinamento

    In realtà vorrei capire cosa c'è di sbagliato nel "mio" algoritmo, dato che ci ho anche speso un po di tempo
  • Re: Problema con programma ordinamento

    Esistono diversi algoritmi di ordinamento il tuo credo sia sbagliato
    il piu semplice è il bubblesort poi ce ne sono di altri ad esempio quicksort, mergesort, radixort, etc..
    Questi saranno sicuramente molto piu veloci dei tuoi
  • Re: Problema con programma ordinamento

    Comunque "mio" è fra virgolette perchè non è il mio algoritmo, sarebbe il bubblesort, però credo che il problema del programma non sia nell'ordinamento dato che alla fine i numeri stampati sono ordinati, il problema è che non sono i numeri che gli ho dato da tastiera
  • Re: Problema con programma ordinamento

    In realtà il C mette a disposizione una funzione di ordinamento nell'header stdlib.h, che si utilizza più o meno così:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define N 100000
    
    int cmp(void const *a, void const *b);
    
    int main(void)
    {
    int vett[N],i;
    clock_t c_start, c_end;
    double TempoImpiegato;
    srand(time(0));
    for (i=0;i<N;i++)
            vett[i] = 1+rand()%100;
    c_start=clock();
    qsort(vett,N,sizeof(int),cmp);
    c_end=clock();
    TempoImpiegato = (double)(c_end - c_start) / CLOCKS_PER_SEC;
    printf("Tempo impiegato -> %5.5f secondi\n\n", TempoImpiegato);
    return 0;
    }
    
    int cmp(const void *a, const void *b)
    {
    int first=*(int *)a;
    int second=*(int *)b;
    if(first>second)
            return 1;
    if(first<second)
            return -1;
    return 0;
    }
  • Re: Problema con programma ordinamento

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 100
    
    int main(void){
        int v[MAX];
        int i, n, k, temp;
        
        printf("Quanti numeri vuoi inserire? DIGITA:");
        scanf("%d", &n);
        for(i=0;i<n;i++){
                         printf("Inserisci il valore numero %d:", i+1);
                         scanf("%d",&v[i]);
                         }
    
        for(i = 0; i<n-1; i++) {
        for(k = 0; k<n-1-i; k++) {
        if(v[k] > v[k+1]) {
        temp = v[k];
        v[k] = v[k+1];
        v[k+1] = temp;
                          }
                                  }
                               }
        printf("\nVISUALIZZA VETTORE ORDINATO\n");
        for(i=0; i<n; i++){
                 printf("%d|",v[i]);
                           }
        printf("\n");
        
        system("pause");
        return 0;
                   }
    
    Questo il mio codice
Devi accedere o registrarti per scrivere nel forum
6 risposte