Ordenar de mayor a menor elementos de un vector en C

Dudas sobre el C/C++ en general
Responder
Mensaje
Autor
namaste
Mensajes: 10
Registrado: 13/10/2019 6:20 pm

Ordenar de mayor a menor elementos de un vector en C

#1 Mensaje por namaste » 13/10/2019 10:56 pm

Hola!! Soy nueva en programación, y no entiendo mucho vectores, todavía me cuesta... quería consultar si alguien sabe cómo se hace para ordenar de mayor a menor los elementos de un vector dentro de una función en c?
He visto que en los métodos de seleccion, inserción, etc.. se usa para menor a mayor, pero en caso de mayor o menor cómo hago para modificarlo o qué método sería recomendable?

Muchas gracias!! :D

mollok
Mensajes: 521
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Ordenar de mayor a menor elementos de un vector en C

#2 Mensaje por mollok » 14/10/2019 2:23 am

Sólo debes cambiar la comparación. Si entiendes el proceso de ordenación que has elegido verás que hay un momento que dice si a > b haz algo. Solo cambia a a < b y te lo ordenará al revés.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

namaste
Mensajes: 10
Registrado: 13/10/2019 6:20 pm

Re: Ordenar de mayor a menor elementos de un vector en C

#3 Mensaje por namaste » 14/10/2019 6:37 pm

mollok escribió:
14/10/2019 2:23 am
Sólo debes cambiar la comparación. Si entiendes el proceso de ordenación que has elegido verás que hay un momento que dice si a > b haz algo. Solo cambia a a < b y te lo ordenará al revés.
te referis a 'a' como un elemento de vector y b como el tope? cuando se inicializa (con for o while)?

el ejercicio me dice "Dado un vector donde en cada posición se encuentra la fuerza de cada hombre del ejército, ordenarlo de manera que los más fuertes queden delante (al principio del vector) y los más débiles atrás (al final del vector)."

con el metodo de seleccion hice:

Código: Seleccionar todo

#define MAX_EJERCITO 10000

void ordenar_ejercito(int ejercito[MAX_EJERCITO], int cantidad_soldados){
    int i,j;
    int maximo;
    int mayor;
   for (i = 0; i <(cantidad_soldados-1); i++){
       maximo = i;
       for (j =i +1; j <cantidad_soldados; j++){
           if (ejercito[maximo]<ejercito[j])
               maximo = j;
            
       }
    }
    mayor = ejercito[j];
    ejercito[j] = ejercito[maximo];
    ejercito[maximo] = mayor;
}
pero.. me sale como que está mal y no entiendo por qué eso no ordena de mayor a menor :/

Avatar de Usuario
daltomi
Mensajes: 354
Registrado: 28/04/2007 7:29 pm
Ubicación: Argentina

Re: Ordenar de mayor a menor elementos de un vector en C

#4 Mensaje por daltomi » 15/10/2019 3:54 am

Buenas.

El intercambio entre mayor y menor debe hacerlo dentro del bucle for i. y utilizar i como indice.

Código: Seleccionar todo

void ordenar_ejercito(int ejercito[MAX_EJERCITO], int cantidad_soldados){
    int i,j;
    int maximo;
    int mayor;
   for (i = 0; i <(cantidad_soldados-1); i++){
       maximo = i;
       for (j =i +1; j <cantidad_soldados; j++){
           if (ejercito[maximo]<ejercito[j])
               maximo = j;
            
       }
       mayor = ejercito[i];
       ejercito[i] = ejercito[maximo];
       ejercito[maximo] = mayor;
    }
}
}
Saludos.

namaste
Mensajes: 10
Registrado: 13/10/2019 6:20 pm

Re: Ordenar de mayor a menor elementos de un vector en C

#5 Mensaje por namaste » 15/10/2019 11:37 am

daltomi escribió:
15/10/2019 3:54 am
Buenas.

El intercambio entre mayor y menor debe hacerlo dentro del bucle for i. y utilizar i como indice.

Código: Seleccionar todo

void ordenar_ejercito(int ejercito[MAX_EJERCITO], int cantidad_soldados){
    int i,j;
    int maximo;
    int mayor;
   for (i = 0; i <(cantidad_soldados-1); i++){
       maximo = i;
       for (j =i +1; j <cantidad_soldados; j++){
           if (ejercito[maximo]<ejercito[j])
               maximo = j;
            
       }
       mayor = ejercito[i];
       ejercito[i] = ejercito[maximo];
       ejercito[maximo] = mayor;
    }
}
}
Saludos.
AHHH, claro, mil gracias che!

betsyclaire
Mensajes: 1
Registrado: 31/10/2019 6:02 pm

Re: Ordenar de mayor a menor elementos de un vector en C

#6 Mensaje por betsyclaire » 31/10/2019 6:04 pm

Sólo debes cambiar la comparación.

Avatar de Usuario
kiko66
Mensajes: 37
Registrado: 11/10/2019 10:51 am

Re: Ordenar de mayor a menor elementos de un vector en C

#7 Mensaje por kiko66 » 01/11/2019 6:02 am

hola namaste

crei que era un tema resuelto pero veo que vuelve ...

contestando a tu pregunta sobre si utilizar un for o un while, es cuestion de gustos, el for es muy utiizado porque permite crear, inicializar, comparar e incrementar el iterador, en la misma sentencia pero otras veces no se necesita iterador o lo que necesitas es un do{...}while();

asi que un poco por la necesidad otro poco por gusto

bueno para gusto los colores asi que os dejo otra posible solucion

Código: Seleccionar todo

#include <stdio.h>

void mostrar(int* ej, int ns){      // muestra el ejercito

   printf("\nla lista de soldados es: [%d", ej[0]);
   for(int i=1; i<ns ;i++) printf(", %d", ej[i]);
   printf("]\n\n");   
}

void ordenar(int ej[], int ns){        // ordenar el ejercito por su fuerza

   if(ns<2) return;                    // si solo hay un soldado ya esta orden
   for(int i=0; i<(ns-1) ;i++){        // (ns-1) el ultimo queda ordenado solo
      int orden=i;                     // orden es el indice que quedara ordenado
      for(int j=i+1; j<ns ;j++)        // se comprueba solo los indices no ordenados
         if(ej[j] > ej[orden]) orden=j;// guardo siempre el indice mayor
      int aux=ej[i];                   // al acabar el for ya se cual es el indice
      ej[i]=ej[orden];                 // que tiene mas peso de los que quedan por
      ej[orden]=aux;                   // ordenar y lo intercambio por el del indice i 
   }                                   // quedando ordenado y listo para buscar el siguiente 
} // si queremos ordenar de menor a mayor solo hay que cambiar el operador relacional del if

int main(void){

   int ejercito[]={2,0,12,2,0,5,4,8,-4,6,10,2,6,9}; // fuerza de los soldados del ejercito
   int nsoldados=14;                                // numero de soldados 

   mostrar(ejercito, nsoldados);    // mostrar vector desordenado
   ordenar(ejercito, nsoldados);    // ordenar vector
   mostrar(ejercito, nsoldados);    // mostrar vector ordenado

   return 0;
}
saludos

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados