[C con Clase] ayuda con ordenamiento C++
gdotta
gdotta en telefonica.net
Jue Mar 19 15:24:44 CET 2009
Yo sustituiría el bucle exterior "for(j=1...." por un
"while(huboCambios)" de manera que la ordenación se termine la primera
vez que se haya recorrido el bucle interior "for(i=1..." sin que el if()
haya sido cierto ni una vez.
Por otro lado, no está claro si los arrays se están utilizando
comenzando desde 1 o desde 0.
O sea, quedaría así:
int i,n;
int* lista; //supongo que se trata de enteros.
cout<<"ingrese la cantidad de elementos: ";
cin>> n;
cout<<endl<<endl;
lista = new int[n];
i = 0; //faltaba inicializar i
while (i<n){
printf("ingrese el elemento lista[%d]",i);
cin>>lista[i];
i++;}
int aux, huboCambios=1;
while (huboCambios){
huboCambios = 0;
for(i=0;i<n-1;i++){
if (lista[i]>lista[i+1]){
aux=lista[i];
lista[i]=lista[i+1];
lista[i+1]=aux;
huboCambios=1; }}}
Un saludo,
Yan
El jue, 19-03-2009 a las 01:50 -0300, Pablo Brunet escribió:
>
> # include <stdio.h>
> # include <iostream>
>
> using namespace std;
> int lista[10],n,i,,j, aux;
> int main()
> {
> cout<<"ingrese la cantidad de elementos: ";
> cin>> n;
> cout<<endl<<endl;
> while (i<n){
> printf("ingrese el elemento lista[%d]",i);
> cin>>lista[i];
> i++;}
>
> for (j=1;j<n;j++){
> for(i=1;i<n-1;i++){
> if (lista[i]>lista[i+1]){
> aux=lista[i];
> lista[i]=lista[i
> +1];
> lista[i+1]=aux;
> }}}
> cout<<endl<<endl;
> cout<<" *** Vector Ordenado *** "<<endl<<endl;
>
> for (i=0;i<n;i++){
> cout<<" "<<lista[i];}
> cout<<endl;
> system("PAUSE");
> return 0;
> }
Más información sobre la lista de distribución Cconclase