Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.97
асд
Сообщений: n/a
#1

Сортировка двумерного массива - C++

13.05.2008, 09:21. Просмотров 5221. Ответов 10
Метки нет (Все метки)

Подскажите как отсортировать двумерный массив по возрастанию.

Например дан такой массив двумерный:
9 7 4
1 2 3
5 5 5

Должен получится вот такой:
1 2 3
5 5 5
9 7 4



Как сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
13.05.2008, 09:33     Сортировка двумерного массива #2
все очень просто, перегоняешь его в одномерный, сортируешь и перезаписываешь уже существующий...
асд
Сообщений: n/a
13.05.2008, 10:03     Сортировка двумерного массива #3
В чём тут тогда ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
for(i=0;i<n;i++)
   {
     b[i]=a[i][0];
      for(j=1;j<n;j++)
       if(a[i][j]>b[i])
        b[i]=a[i][j];
       printf("%d ",b[i]);
       printf("\n");
   }
}
      for(k=0;k<n;k++)          
        {
            for(i=0;i<n-k;i++)
            if(b[i]<b[i+1])
            {               
                c=b[i];
                b[i]=b[i+1];
                b[i+1]=c;
            }
             for(j=0;j<n-k;j++)
          {
              c=a[i][j];
              a[i][j]=a[i+1][j];
              a[i+1][j]=c;
          }
     printf("%d ",a[i][j]);
     printf("\n");
        }
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
13.05.2008, 10:54     Сортировка двумерного массива #4
честно... лень код твой изучать, вот как это получилось у меня...
Код
#include <iostream>
#include <stdlib.h>
int main()
{
  using namespace std;
  int mass[3][3];
  int* arr = new int[9];
  int cnt = 0, tmp = 0;
  cout<<"Enter array!"<<endl;
  for(int i = 0; i < 3; i++)
    for(int j = 0; j < 3; j++){
      cin>>mass[i][j];
      arr[cnt] = mass[i][j];
      cnt++;
    }
  // Сортируем
  for(int i = 0; i < cnt; i++){
    for(int j = 0; j < cnt; j++){
      if(arr[i]<arr[j]){
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
      }
    }
  }
  cnt = 0;
  for(int i = 0; i < 3; i++)
    for(int j = 0; j < 3; j++){
      mass[i][j] = arr[cnt];
      cnt++;
    }
  cout<<"Result:"<<endl;
  for(int i = 0; i < 3; i++){
    for(int j = 0; j < 3; j++){
      cout<< mass[i][j] << " ";
    }
    cout<< endl;
  }
}
правда заточено строго под матрицу 3 на 3, но сделать это все настраеваемым несложно, статику меняешь на динамику и все... мне кажется так проще, чем тягать элементы по массиву...
асд
Сообщений: n/a
13.05.2008, 18:42     Сортировка двумерного массива #5
У тебя не так сортирует.

Надо чтобы сортировала по макс элементам в каждой строке.
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 91
13.05.2008, 21:41     Сортировка двумерного массива #6
асд, как я понимаю, прога работает, но как не правильно - что неправильного?
зы возможно стоит протрессировать, чтобы разобраться
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
14.05.2008, 09:23     Сортировка двумерного массива #7
тебе отсортировать надо по максимальному массиву каждой строчки?
асд
Сообщений: n/a
14.05.2008, 16:37     Сортировка двумерного массива #8
Цитата Сообщение от WooDooMan666 Посмотреть сообщение
тебе отсортировать надо по максимальному массиву каждой строчки?
Да
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
14.05.2008, 17:51     Сортировка двумерного массива #9
ну вот что у меня получилось:
Код
#include <iostream>
#include <stdlib.h>
int main()
{
  using namespace std;
  int mass[3][3];
  int cnt = 0, tmp = 0, max = 0;
  bool stop = false;
  cout<<"Enter array!"<<endl;
  for(int i = 0; i < 3; i++)
    for(int j = 0; j < 3; j++){
      cin>>mass[i][j];
      cnt++;
    }
  // Ni?oe?oai
  for(int i = 0; i < 3; i++){
    max = mass[i][0];
    for(int j = 0; j < 3; j++){
      if(max < mass[i][j]) max = mass[i][j];
    }
    stop = false;
    for(int j = 0; j < 3; j++){
      if(j == i) continue;
      for(int k = 0; k < 3; k++){
        if(max > mass[j][k]){
          stop = true;
          break;
        }
      }
      if(stop){
        break;
      }else{
        for(int f = 0; f < 3; f++){
          tmp = mass[i][f];
          mass[i][f] = mass[j][f];
          mass[j][f] = tmp;
        }
      }
    }
  }
  cout<<"Result:"<<endl;
  for(int i = 0; i < 3; i++){
    for(int j = 0; j < 3; j++){
      cout<< mass[i][j] << " ";
    }
    cout<< endl;
  }
}
асд
Сообщений: n/a
15.05.2008, 17:42     Сортировка двумерного массива #10
Слушай, а вот если ввести массив вот такой:
1 2 3
2 2 2
3 3 3
то прога не работаетю





И ещё, что ты делаешь вот в этой части:
stop = false;
for(int j = 0; j < 3; j++){
if(j == i) continue;
for(int k = 0; k < 3; k++){
if(max > mass[j][k]){
stop = true;
break;
}
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2008, 15:08     Сортировка двумерного массива
Еще ссылки по теме:

Сортировка двумерного массива C++
Сортировка двумерного массива C++
C++ Сортировка двумерного массива
Сортировка двумерного массива C++
сортировка двумерного массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
19.05.2008, 15:08     Сортировка двумерного массива #11
Код
  using namespace std;
  int mass[3][3];
  int res[3][3] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
  int rows[3] = {0, 1, 2}; int maxs[3];
  int tmp = 0;
  cout<<"Enter array!"<<endl;
  for(int i = 0; i < 3; i++)
    for(int j = 0; j < 3; j++){
      cin>>mass[i][j];
    }
  // Находим максимумы
  for(int i = 0; i < 3; i++){
    maxs[i] = mass[i][0];
    for(int j = 0; j < 3; j++){
      if(maxs[i] < mass[i][j]) maxs[i] = mass[i][j];
    }
  }
  // Сортируем и запоминаем позиции
  for(int i = 0; i < 3; i++){
    for(int j = i + 1; j < 3; j++){
      if(maxs[i] > maxs[j]){
        tmp = maxs[i];
        maxs[i] = maxs[j];
        maxs[j] = tmp;
        tmp = rows[i];
        rows[i] = rows[j];
        rows[j] = tmp;
      }
    }  
  }
  for(int i = 0; i < 3; i++){
    for(int j = 0; j < 3; j++){
      res[i][j] = mass[rows[i]][j];
    }
  }
  cout<<"Result:"<<endl;
  for(int i = 0; i < 3; i++){
    for(int j = 0; j < 3; j++){
      cout<< res[i][j] << " ";
    }
    cout<< endl;
  }
  getch();
не получилось изящно решить, пришлоьс брать бесхитросным способом ((((
Yandex
Объявления
19.05.2008, 15:08     Сортировка двумерного массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru