Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ordenar array ascendente en C

Estas en el tema de Ordenar array ascendente en C en el foro de C/C++ en Foros del Web. Tengo que ordenar un array de forma ascendente, estoy utilizando el llamado metodo de la burbuja basico para ordenar vectores pero hay un numero que ...
  #1 (permalink)  
Antiguo 05/04/2015, 09:46
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
Ordenar array ascendente en C

Tengo que ordenar un array de forma ascendente, estoy utilizando el llamado metodo de la burbuja basico para ordenar vectores pero hay un numero que se me queda rezagado al final y no me lo ordena del todo bien.


Código C:
Ver original
  1. printf("\nORDENANDO DE FORMA ASCENDENTE");
  2.     for(i=0;i<numposiciones;i++){
  3.         for(x=i+1;x<numposiciones-1;x++){
  4.         if(vector[i]>vector[x]){
  5.             aux=vector[i];
  6.             vector[i]=vector[x];
  7.             vector[x]=aux;
  8.         }
  9.     }
  10. }
  #2 (permalink)  
Antiguo 05/04/2015, 10:24
(Desactivado)
 
Fecha de Ingreso: abril-2015
Ubicación: España
Mensajes: 616
Antigüedad: 9 años
Puntos: 74
Respuesta: Ordenar array ascendente en C

Código C:
Ver original
  1. void bubble_sort(long list[], long n)
  2. {
  3.   long c, d, t;
  4.  
  5.   for (c = 0 ; c < ( n - 1 ); c++)
  6.   {
  7.     for (d = 0 ; d < n - c - 1; d++)
  8.     {
  9.       if (list[d] > list[d+1])
  10.       {
  11.         t         = list[d];
  12.         list[d]   = list[d+1];
  13.         list[d+1] = t;
  14.       }
  15.     }
  16.   }
  17. }

Sin embargo, tengo entendido que el método de la burbuja es el más lento que hay. Aquí te dejo el algoritmo de ordenación por selección, que es más rápido:

Código C:
Ver original
  1. void intercambiar (Dato * A, int i, int j)
  2. {
  3.     Dato tmp = A[i];
  4.     A[i] = A[j];
  5.     A[j] = tmp;
  6. }
  7. void ordenacion_seleccion (Dato * A, int N)
  8. {
  9.     int i, j, k;
  10.     for (i = 0; i < N - 1; i++)
  11.     {
  12.         for (k = i, j = i + 1; j < N; j++)
  13.             if (A[j] < A[k])
  14.                 k = j;
  15.         if (k != i)
  16.             intercambiar (A, i, k);
  17.     }
  18. }

Última edición por superweb360; 05/04/2015 a las 10:31
  #3 (permalink)  
Antiguo 05/04/2015, 10:58
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Ordenar array ascendente en C

Buenas,

Estás cerca. El problema es que nunca estás comparando el último par.

Cambia esto:
Código C:
Ver original
  1. for(i=0;i<numposiciones;i++){
  2.         for(x=i+1;x<numposiciones-1;x++){

Por esto:
Código C:
Ver original
  1. for(i=0;i<numposiciones - 1;i++){
  2.         for(x=i+1;x<numposiciones;x++){
Y ya te debería funcionar.

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:14.