2010-10-24 36 views
13

tengo esta matriz:¿Cómo ordenar la matriz C++ en modo ASC y DESC?

array[0] = 18; 
array[1] = -10; 
array[2] = 2; 
array[3] = 4; 
array[4] = 6; 
array[5] = -12; 
array[6] = -8; 
array[7] = -6; 
array[8] = 4; 
array[9] = 13; 

¿cómo ordenar la matriz en el modo asc/desc en C++?

+1

Usted asignó la misma posición de su matriz cada vez. El resultado final de su matriz es de 1 longitud con una entrada de 13. – Starkey

+1

Ni siquiera llenó la matriz, repetidamente colocó diferentes valores en la misma ubicación. –

+0

Pigben: mi error. Tengo el hábito de copiar y pegar: p –

Respuesta

42

ordenar una matriz en orden ascendente, utilice:

#include <algorithm> 

int main() 
{ 
    //... 
    std::sort(array, array+n); //where n is the number of elements you want to sort 
} 

para ordenarla en descendente, utilice

#include <algorithm> 
#include <functional> 

int main() 
{ 
    //... 
    std::sort(array, array+n, std::greater<int>()); 
} 

HTH

+5

@steven_desu: ¿Qué encabezados no estándar? – sth

+7

@steven: 'algorithm' y' functional' ** son cabeceras estándar ** tal como se definen por la norma internacional C++ (ver 17.6.1.2 en el proyecto actual). Laminar manualmente sus propias funciones de clasificación es una pérdida de tiempo. Es propenso a errores y muy probablemente arroje un código menos eficiente. ¿Y qué te hace pensar que esto es tarea? A veces la gente sólo quiere ordenar matrices y seguir adelante con sus vidas ... – fredoverflow

+0

o una expresión lambda sencilla en lugar de incluir una cabecera funcional conjunto, que también es alto rendimiento, ya que se expande hacia fuera en línea. – texasbruce

2

Puede pasar el functor de comparación personalizado a la función std::sort.

2

Bueno en primer lugar estoy esperando su asignación de matrices era sólo un error al publicar pero todos sus números se asignan a la misma ubicación de memoria. No hay nada para ordenar.

Después de eso, puede usar la función sort(). El ejemplo vinculado muestra un método fácil para usarlo. Tenga en cuenta que hay un tercer parámetro que no se usa que especificará cómo comparar los elementos. Por defecto, si no especifica el parámetro, usa 'menos que' para que obtenga una ordenación de orden ascendente. Cambie esto para especificar el comparador "mayor que" para obtener una clasificación de orden descendente.

1

En general, se puede simplemente intercambiar las dos variables en

http://www.cplusplus.com/reference/algorithm/sort/

Cambio

bool myfunction (int i,int j) { return (i<j); } 

a

bool myfunction (int i,int j) { return (j<i); } 

puede cambiarle el nombre a otra cosa para que tenga dos funciones de comparación para usar cuando el resultado debe ser un descendiendo o descendiendo

Si el cuerpo de la función ha complicado expresiones e implica i y j varias veces, entonces es más fácil de cambiar el i y j en la lista de parámetros en lugar de cada i y j en el cuerpo:

bool myfunction (int j,int i) { return (i<j); } 

Lo mismo ocurre con

http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

1
#include <iostream> 
#include <stdlib.h> 
using namespace std; 

int main (int argc, char *argv[]) 
    { 
     int num[10]={18,-10,2,4,6,-12,-8,-6,13,-1}; 
     int temp; 

     cout << "Ascending Sort : \n\n"; 

     for(int i=0; i<=10; i++) 
      { 
       for(int j=i+1; j<=10; j++) 
        { 
         if(num[i]>num[j]) 
          { 
           temp=num[i]; 
           num[i]=num[j]; 
           num[j]=temp; 
          } 
        } 
       cout << num[i] << "\n"; 
      } 

     cout << "\nDescending Sort : \n\n"; 

     for(int i=0; i<=10; i++) 
      { 
       for(int j=i+1; j<=10; j++) 
        { 
         if(num[i]<num[j]) 
          { 
           temp=num[j]; 
           num[j]=num[i]; 
           num[i]=temp; 
          } 
        } 
       cout << num[i] << "\n"; 
      } 

    return 0; 
} 
+0

Este código se rompe, ya que accede a la matriz fuera de límites. – Galik

Cuestiones relacionadas