La verdad no había visto tú código detenidamente, solo le dí un vistazo, ahora me doy cuenta, lo que estas tratando de hacer es ordenar una lista enlazada, pero eso no se puede usando direccionamiento de arreglos (A[j-1] = A[j]), hay que usar apuntadores, la explicación de como hacerlo me quedaría demasiado larga y complicada, por lo que te paso el código ya terminado, es tú mismo código pero le he agregado una función para ordenar la lista:
Código:
#include <iostream>
using namespace std;
struct Valor
{
int num;
};
struct Nodo;
typedef Nodo *PNodo;
struct Nodo
{
Valor info;
PNodo sig;
};
typedef PNodo Lista;
void ordenar(Lista l)
{
int fin;
PNodo nodo;
if(!l) return;
do {
fin=0;
for (nodo=l; nodo->sig; nodo=nodo->sig) {
if (nodo->info.num<nodo->sig->info.num) {
fin=nodo->info.num; // Uso fin como variable temporal
nodo->info.num=nodo->sig->info.num;
nodo->sig->info.num=fin;
fin=1;
}
}
} while(fin==1);
}
int main()
{
Lista l;
int x;
char op;
PNodo anterior,nuevo,aux;
l=NULL;
do {
cout << "\nNumero: ";
cin >> x;
nuevo=new(Nodo);
nuevo->info.num=x;
if (l==NULL)
l=nuevo;
else
anterior->sig=nuevo;
anterior = nuevo;
cout << "Ya has acabado de introducir numeros";
cout << " (s/S)?";
cin >> op;
} while ((op!='s') && (op!='S'));
nuevo->sig=NULL;
cout<<"\nLa lista generada de mayor a menos es: \n"<< endl;
ordenar(l); // Función de ordenación por método de la burbuja usando apuntadores
aux=l;
while (aux!=NULL) {
cout <<(*aux).info.num << " " ;
aux=(*aux).sig ;
}
cout << "\n" << endl;
system ("pause");
return 0;
}