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

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

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

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

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

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

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

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



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

Сортировка двумерного массива - C++
Задача: Написать код сортировки двумерного массива размерностью m*n. Переставить строки матрицы так, чтобы элементы k-го столбца были...

Сортировка двумерного массива - C++
По бумажке расписал - вроде всё правильно, но работает некорректно. Где ошибка? void sort(int **p, int n, int m) { int...

Сортировка Двумерного массива - C++
Создать двумерный массив. Отсортировать каждую строку по возрастанию. Одномерный смог отсортировать а.двух мерный слабо =( ...

Сортировка двумерного массива - C++
25) В каждой строке матрицы A(n, n) найти наибольший элемент и поменять его местами с соответствующим диагональным элементом. #include...

сортировка двумерного массива - C++
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<conio.h> int i,j,n,k,co,cp; ...

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

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

Надо чтобы сортировала по макс элементам в каждой строке.
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 91
13.05.2008, 21:41 #6
асд, как я понимаю, прога работает, но как не правильно - что неправильного?
зы возможно стоит протрессировать, чтобы разобраться
0
Lord_Voodoo
Супер-модератор
8594 / 2211 / 61
Регистрация: 07.03.2007
Сообщений: 10,974
Завершенные тесты: 1
14.05.2008, 09:23 #7
тебе отсортировать надо по максимальному массиву каждой строчки?
0
асд
14.05.2008, 16:37 #8
Цитата Сообщение от WooDooMan666 Посмотреть сообщение
тебе отсортировать надо по максимальному массиву каждой строчки?
Да
Lord_Voodoo
Супер-модератор
8594 / 2211 / 61
Регистрация: 07.03.2007
Сообщений: 10,974
Завершенные тесты: 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
асд
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;
}
}
Lord_Voodoo
Супер-модератор
8594 / 2211 / 61
Регистрация: 07.03.2007
Сообщений: 10,974
Завершенные тесты: 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++
Дан двумерный массив, размерностью N на N. Надо взять отдельно каждую строку и каждый столбец, отсортировать по возрастанию и сравнить с...

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

Сортировка двумерного массива - C++
Input sample: 4 10 20 30 7 30 00 23 59 59 13 30 30 Output sample: 7 30 0 10 20 30

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


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

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

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