Visualizzazione dei risultati da 1 a 7 su 7

Discussione: ordinamento array [c]

  1. #1

    ordinamento array [c]

    Ciao a tutti sono alle prime armi con il [c] ed ho un problema, ho pensato a questa soluzione per ordinare un array (ovviamente il mio programma non funziona) e vorrei sapere se con questa soluzione non funzionerà mai e devo pensare a qualcos'altro, o se con qualche accorgimento potrebbe funzionare??

    Io volevo confrontare un elemento del vettore "v" con tutti gli altri e ogni volta che è precedente aumentare un contatore.
    Quel contatore mi darà poi la posizione che deve avere l'elemento in un altro vettore "w".


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

    int main()

    { int i,j,k,N=4;
    int cont=0,v[N],w[N];
    for(i=0;i<N;i++){
    scanf("%d",&v[i]);}

    for(i=0;i<N;i++){
    for(j=0;j<N;j++){
    if(strcmp(v[i],v[j])<0){
    cont++;}}
    k=cont-1;
    w[k]=v[i];
    }
    for(i=0;i<N;i++){
    printf("%d",w[i]);}
    return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Gli interi non si confrontano con la strcmp ... quella serve per gli array di char ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ah ok XD
    A me infatti nel programma vero mi servirebbe per ordinare un vettore di stringhe ma per semplificarmi le cose ho provato cosi, ora provo ad applicare questa cosa al vettore di stringhe!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quello che ti ho fatto notare è un errore macroscopico ... non è detto che con gli array di char il metodo che hai usato funzioni, anzi, ne dubito.

    Se vuoi ordinare dei dati usa gli algoritmi noti ... comincia dai più semplici, un "bubble sort" (su cui trovi suggerimenti ovunque su internet).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    24
    comunque se volevi usare il tuo metodo bastava comparare i due valori con:

    if(v[i]<v[j])

    ma a questo punto leggi un buon manuale per le basi del c

  6. #6
    ah boh ci sono riuscito funziona il mio metodo (rimettendo il contatore a 0 ogni volta)

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

    int main()
    { int i,j,N=4,M=99;
    int cont=0;
    char v[N][M],w[N][M];
    for(i=0;i<N;i++){
    gets(v[i]);}

    for(i=0;i<N;i++){
    for(j=0;j<N;j++){
    if(strcmp(v[i],v[j])>0){
    cont++;}}
    strcpy(w[cont],v[i]);
    cont=0;
    }

    for(i=0;i<N;i++){
    printf("%s\n",w[i]);}
    return 0;
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' un metodo estremamente inefficiente, sia per la memoria occupata sia per il tempo impiegato ... specialmente all'aumentare degli elementi del vettore da ordinare.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.