Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Сортировка строк матрицы по возрастанию максимальных элементов в строке - C++

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

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

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

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



Как сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2008, 09:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка строк матрицы по возрастанию максимальных элементов в строке (C++):

Сортировка элементов строк матрицы по возрастанию - C++
Дано матрица с размером NxM надо сортировать элементы строка по возрастаню ввод данных 2 5 17 -22 1 -58 28 58 64 81 37 71 ...

Сортировка строк матрицы по возрастанию суммы их элементов - C++
Собственно не могу понять какой алгоритм сортировки рядков по сумме их элементов? #include <iostream> using namespace std; int...

Сортировка строк матрицы по возрастанию первых элементов - C++
Составить программу, которая переформирует заданную матрицу так, чтобы ее строки расспалагались в порядке возрастания их первых элементов. ...

Сортировка матрицы по возрастанию количества одинаковых элементов в каждой строке - C++
Помогите с задачей,плииз! упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой...

Отсортировать строки матрицы по возрастанию их максимальных элементов - C++
Нужно отсортировать строки матрицы по возрастанию их максимальных элементов..программу написал, все работает. Но теперь нужно реализовать...

Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов - C++
Дана матрица Х. Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов строк (использовать...

10
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
13.05.2008, 09:33 #2
все очень просто, перегоняешь его в одномерный, сортируешь и перезаписываешь уже существующий...
0
асд
0 / 0 / 0
Регистрация: 09.05.2008
Сообщений: 5
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");
        }
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 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, но сделать это все настраеваемым несложно, статику меняешь на динамику и все... мне кажется так проще, чем тягать элементы по массиву...
0
асд
0 / 0 / 0
Регистрация: 09.05.2008
Сообщений: 5
13.05.2008, 18:42 #5
У тебя не так сортирует.

Надо чтобы сортировала по макс элементам в каждой строке.
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
13.05.2008, 21:41 #6
асд, как я понимаю, прога работает, но как не правильно - что неправильного?
зы возможно стоит протрессировать, чтобы разобраться
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
14.05.2008, 09:23 #7
тебе отсортировать надо по максимальному массиву каждой строчки?
0
асд
0 / 0 / 0
Регистрация: 09.05.2008
Сообщений: 5
14.05.2008, 16:37 #8
Цитата Сообщение от WooDooMan666 Посмотреть сообщение
тебе отсортировать надо по максимальному массиву каждой строчки?
Да
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 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;
  }
}
0
асд
0 / 0 / 0
Регистрация: 09.05.2008
Сообщений: 5
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;
}
}
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 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();
не получилось изящно решить, пришлоьс брать бесхитросным способом ((((
0
19.05.2008, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2008, 15:08
Привет! Вот еще темы с ответами:

Сортировка строк матрицы по возрастанию - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; const int n = 3; void...

Вычислить сумму максимальных элементов строк заданной матрицы - C++
С клавиатуры вводятся размеры прямоугольной матрицы n и m. Вводятся также целочисленые элементы заданной матрицы. Программа...

Сформировать одномерный массив из максимальных элементов строк матрицы - C++
Дана прямоугольная матрица A (N, M) (N M, M 15). Найти максимальный элемент в каждой строке. Сформировать массив B из найденных...

Вычислить сумму максимальных элементов строк заданной матрицы - C++
С клавиатуры вводятся размеры прямоугольной матрицы n и m. Вводятся также целочисленые элементы заданной матрицы. Программа вычисляет...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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