Newsgroup: it.comp.lang.c++
Titolo: ordinamento vettore

ciao a tutti,
ho questo piccolo programma che "dovrebbe" ordinare gli elementi di un
vettore. Il programma viene compilato correttamente ma si blocca durante
l'esecuzione al momento della chiamata alla funzione "ordinavet":
#include <iostream>
#include <cstdlib>
void leggi (int vet[], int &p);
void ordinavet (int vet[], const int &p);
void stampa (int vet[], int &p);
int main(int argc, char *argv[])
{
  int vet[50], n;
  n=0;
  cout<<"Inserire la dimensione del vettore (MAX 50)\n";
  cin>> n;
  cout<<"Inserire gli elementi del vettore\n";
  leggi(vet, n);
  cout<<"VETTORE ORDINATO\n";
  ordinavet(vet, n);
  stampa(vet, n);
  system("Pause");
  return 0;
}
void leggi (int vet[], int &p)
{
  int i;
  for(i=0; i<p;i++)
    {
      cout<<"vet["<<i<<"]:";
      cin>>vet[i];
    }
}
void stampa (int vet[], int &p)
{
  int i;
  for(i=0; i<p;i++)
    {
      cout<<"vet["<<i<<"]:";
      cout<<vet[i]<<"\n";
    }
}
void ordinavet (int vet[], const int &p)
{
  int i;
  int temp;
  int j;
  j=0;
   temp=0;
  for (i=0; i<p-1; i++)
  for (j=i+1; i<p; j++)
      if (vet[i]<vet[i+1])
        {
          temp=vet[i+1];
          vet[i+1]=vet[i];
          vet[i]=temp;
        }
}
dove sbaglio?
ciao!

forse...
   for (j=i+1; i<p; j++)
doveva essere
   for (j=i+1; j<p; j++)
l'odinamento mi sembra di tipo descrescente, dal piu' grande al piu'
piccolo, e' quello che volevi fare ?
Ciao
Fabio

 ha scritto nel messaggio
news:b4756i$ts0$1...@newsreader.mailgate.org...

si infatti ora funziona ma c'è un problema. Se il vettore è costituito da:
3,4,1,2 funziona correttamente e restituisce 4,3,2,1. Se invece gli do in
ingresso 3,1,4,2 mi restituisce 3,4,2,1...come mai???
ciao

void ordinavet (int vet[], const int &p)
{
  int i;
  int temp;
  int j;
  j=0;
  temp=0;
  for (i=0; i<p; i++)
  for (j=p-1-i; j>0; j--)
      if (vet[j]>vet[j-1])
        {
          temp=vet[j];
          vet[j]=vet[j-1];
          vet[j-1]=temp;
        }
}
Fabio

 void ordinavet (int vet[], const int &p)
[CUT]
ho provato il tuo codice ma inserendo:
3,4,2,1 restituisce 4,4,2,1...:-((
puoi spiegarmi inoltre un pò la logica del codice?
ciao e grazie
maurizio

 3,4,2,1 restituisce 4,4,2,1...:-((
scusa avevo sbagliato io!!! funziona correttamente ma non ho capito bene la
logica...
ciao!

Dall'esempio fornito ho pensato che volevi realizzare un bubble-sort cosi'
te ne ho fornita una implementazione con ordinamento decrescente.
L'idea di base e' di sposare (di trascinare) l'elemento piu' grande
all'inizio del vettore con una sola iterazione sul vettore. Dovendo
trascinare l'elemento piu' grande all'inizio del vettore devi iniziare dalla
fine del vettore (logica inversa se vuoi un ordinamento screscente).
Su 
www.google.com
 trovi informazioni piu' dettagliate
Ciao
Fabio

 l'esecuzione al momento della chiamata alla funzione "ordinavet":
ma perché non usi la STL?
vector <int, less<int>() > intVec
così hai il vettore ordinato in senso crescente
senno puoi fare
vector <int> intVec
sort(intVec.begin(), intVec.end(), less<int>())
o crearti un tua funzione di ordinamento MioOrd(int &a, int &b) { return a <
b; }
vector <int, MioOrd> intVec
oppure
sort(intVec.begin(), intVec.end(), MioOrd);
--
Ciao.
Maurizio
P.S.: eliminare _!NO$PAM! per rispodere in privato

 ma perché non usi la STL?
perchè la STL non fa parte del programma dell'esame e al 90% alla prova di
programmazione escono gli algoritmi di ordinamento...
ciao!

 così hai il vettore ordinato in senso crescente
Interessante. Questo è un esempio della differenza tra STL e libreria
standard del C++ oppure fa parte dello standard e mi era sfuggito?
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 standard del C++ oppure fa parte dello standard e mi era sfuggito?
Dallo Stroustrup:
template <class T, class A =  allocator<T> > class vector {/*...*/}
Direi che il trucco sta qui e ti era sfuggito (ed era sfuggito pure a me)
Adesso mi studio come funziona la cosa...
p.s.
E' un piacere rileggerti su questo NG!
--
Gerolamo

 E' un piacere rileggerti su questo NG!
Grazie! :-)


 vector <int, less<int>() > intVec
devo chiedere venia per lo svarione......
ho indicato il container sbagliato, il modo corretto é
set<int, less<int>() > intVec;


 set<int, less<int>() > intVec;
Ah, ecco. Ora ci siamo.
