[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