2014-01-02 3 views
1

Я использую sort() Функция для одиночного массива работает хорошо.
Я также использовал это для многомерного массива, но это не работает.
Вот код:Сортировка многомерных массивов в C++

#include <iostream> 


using namespace std; 

    int main(){ 

    int a[2][3]; 

    a[0][1]=7; 
    a[1][0]=1; 
    a[1][1]=3; 

    sort(a,a+3); 

    cout<<a[0][1]<<"\t"<<a[1][0]<<"\t"<<a[1][1]; 


return 0; 
} 

Я знаю, что я использую один массив для этого значения, но это пример, и я хочу его в многомерном массиве.

+0

Это может или не поможет ... http://stackoverflow.com/questions/14092642/sorting-a-2-dimensional-array-in-c – doovers

+0

Вы также должны включить заголовок алгоритма. –

ответ

1

Используя ваш код, используйте только std::sort в каждой строке многомерного массива. то есть.

#include <iostream> 


using namespace std; 

int main(){ 

    int a[2][3]; 

    a[0][0]=1; 
    a[0][1]=7; 
    a[0][2]=3; 
    a[1][0]=6; 
    a[1][1]=2; 
    a[1][2]=5; 

    for(int i = 0; i < 2; i++) { 
    sort(a[i],a[i]+3); 
    } 

    for(int row = 0; row < 2; row++) { 
    for(int col = 0; col < 2; col++) { 
     cout << a[row][col] << " "; 
    } 
    } 

    return 0; 
} 

Я инициировал каждый элемент вашего многомерного массива a, так как ваш объявлен a быть размером 6 (2 строки, 3 столбца). Это приведет к выводу 1 3 7 2 5 6, поскольку сортирует строки от наименьшего до наибольшего. Если вы хотите, чтобы отсортировать многомерный массив, так что выход будет читать 1 2 3 5 6 7, то вам нужно будет сделать что-то вроде этого:

#include <iostream> 


using namespace std; 

int main(){ 

    int a[2][3]; 
    int b[6]; 
    int count = 0; 

    a[0][0]=1; 
    a[0][1]=7; 
    a[0][2]=3; 
    a[1][0]=6; 
    a[1][1]=2; 
    a[1][2]=5; 

    for(int row = 0; row < 2; row++) { 
    for(int col = 0; col < 3; col++) { 
     b[count] = a[row][col]; 
     count++; 
    } 
    } 

    sort(b, b+6); 
    count = 0; 

    for(int row = 0; row < 2; row++) { 
    for(int col = 0; col < 3; col++) { 
     a[row][col] = b[count]; 
     count++; 
    } 
    } 

    for(int row = 0; row < 2; row++) { 
    for(int col = 0; col < 3; col++) { 
     cout << a[row][col] << " "; 
    } 
    } 

    return 0; 
} 

Это второй пример, пожалуй, худший из возможных способов идти о сортировке многомерного массива, хотя. Дайте мне знать, если вы обнаружите ошибку в моем коде, я не смог протестировать или вам нужна дополнительная помощь.

+0

Ошибка, за исключением отсутствующих полуколоней после этого 'a [0] [0] = 1;' – Axeem

0

Поскольку многомерные массивы являются смежными вы также можете попробовать:

int main() 
{ 
    int a[2][3]; 

    a[0][0]=1; 
    a[0][1]=7; 
    a[0][2]=3; 
    a[1][0]=6; 
    a[1][1]=2; 
    a[1][2]=5; 

    std::sort(&a[0][0], &a[1][3]); 

    for(int row = 0; row < 2; row++) { 
    for(int col = 0; col < 3; col++) { 
     std::cout << a[row][col] << " "; 
    } 
    } 
} 

В зависимости от того, что вы хотите. Также можно написать begin() и end() для многомерных массивов.

Смежные вопросы