Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.66/32: Рейтинг темы: голосов - 32, средняя оценка - 4.66
асд
0 / 0 / 0
Регистрация: 09.05.2008
Сообщений: 5
1

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

13.05.2008, 09:21. Просмотров 5700. Ответов 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
Ответы с готовыми решениями:

Сортировка элементов строк матрицы по возрастанию
Дано матрица с размером NxM надо сортировать элементы строка по возрастаню ...

Сортировка строк матрицы по возрастанию суммы их элементов
Собственно не могу понять какой алгоритм сортировки рядков по сумме их...

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

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

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

10
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,830
Завершенные тесты: 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
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,830
Завершенные тесты: 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
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,830
Завершенные тесты: 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
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,830
Завершенные тесты: 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
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,830
Завершенные тесты: 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

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

Сортировка строк матрицы по возрастанию
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt;...

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


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

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

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