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

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

Войти
Регистрация
Восстановить пароль
 
 
Lyric
1 / 1 / 0
Регистрация: 01.02.2009
Сообщений: 4
#1

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

07.02.2009, 02:36. Просмотров 47698. Ответов 21
Метки нет (Все метки)

Помогите, пожалуйста с задачей.
Необходимо отсортировать двумерный массив по возрастанию (не переводя его в одномерный).

Должно получиться примерно так:
0 0 1 1
2 3 4 5
7 8 9 9

С помощью одномерного массива - у меня получилось. А как без него не представляю даже:'(
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2009, 02:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка двумерного массива по возрастанию (C++):

Сортировка строк двумерного массива по возрастанию значений первого столбца - C++
Люди добрые помогите, пожалуйста! Суть задачи такова: 1. Создать двумерный массив 2. Отсортировать массив по столбцам Пример: ...

Сортировка массива: сначала положительные по возрастанию, потом отрицательные по возрастанию - C++
Пользователь вводит массив чисел,нужно отсортировать его методом выбора,что бы сначала шли положительные числа,потом отрицательные...

Ошибка при сортировке двумерного массива по возрастанию - C++
По убыванию сортировка работает полноценно,а по возрастанию первое число НЕ понимаю откуда появляется :wall:. Помогите решить данную...

Упорядочить строки двумерного массива по возрастанию их наибольших элементов. - C++
Нужно упорядочить его строки по возрастанию их наибольших элементов. #include "stdafx.h" #include <iostream> using namespace std;...

Как отсортировать столбцы двумерного массива по возрастанию (по сумме столбцов)? - C++
Не понимаю, алгоритма сортировки, пожалуйста помогите

Как составить функцию для отсортировки столбцов двумерного массива по возрастанию ? - C++
Вообще не понимаю принцип действия такой сортировки, кто может помочь и объяснить?

21
Kuzia domovenok
2030 / 1874 / 168
Регистрация: 25.03.2012
Сообщений: 6,451
Записей в блоге: 1
04.05.2013, 19:44 #16
потому что вопрос задать на форуме не умеешь. Какую именно ошибку? Зачем эти очевидные комментарии? Почему прогу читать невозможно из-за отсутствия тегов и отступов?
Лучше разберись в моём коде. Потому что твой ещё и в два раза больше
0
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 724
05.05.2013, 01:23 #17
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//сортировка пузырьком
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
 
void printMatrix(int[][12], const int);
 
using namespace std;
 
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
 
const int SIZE = 12;
int matrix[SIZE][SIZE];
int temp;
srand(time(NULL));
 cout<<"До сортировки""\n\n";
//заполняем массив случайным образом
for(int i = 0; i < SIZE; i++)
for(int j = 0; j < SIZE; j++)
matrix[i][j] = 1 + rand() % 100;
printMatrix(matrix, SIZE);
//сортируем пузырьком
for(int N = 1; N < SIZE * SIZE; N++)
{
for(int i = 0; i < SIZE; i++)
{
for(int j = 0; j < SIZE - 1; j++)
{
if(matrix[i][j + 1] < matrix[i][j])
{
temp = matrix[i][j + 1];
matrix[i][j + 1] = matrix[i][j];
matrix[i][j] = temp;
}
}
//сравниваем последний элемент текущей строки
//с перым элементом следующей
if(matrix[i + 1][0] < matrix[i][SIZE - 1])
{
temp = matrix[i + 1][0];
matrix[i + 1][0] = matrix[i][SIZE - 1];
matrix[i][SIZE - 1] = temp;
}
}
}
cout << "\n\n";
cout<<"После сортировки по возрастанию""\n\n";
printMatrix(matrix, SIZE);
 
return 0;
}
 
//печать массива
void printMatrix(int mx[][12], const int SIZE)
{
for(int i = 0; i < SIZE; i++)
{
 
for(int j = 0; j < SIZE; j++)
cout << setw(4) << mx[i][j];
 
cout << "\n";
}
}
0
GraBLYA
-46 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 62
15.06.2013, 16:01 #18
Сел и задумался над этой задачкой без попыток подсмотреть и у меня за 2 часа пыхтения вот что получилось:
любой массив в памяти записывается последовательно, дополнительные индексы служат лишь упрощением для поиска элементов. Вот я и взял простейший алгоритм сортировки "погружения" или "пузырьковой", добавил бардюр, что бы сортировка не вылезла за пределы массива, и у меня получилась довольно простенькая программа. Возможно варианты выше будут правильнее за счет масштаба, но в случае, если вообще никак не получается вразумить как это работает, мой текст вмещает только все самое элементарное, в нем разберется даже новичек, который с++ знаком на 0 уровне.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//сортировка пузырьком
#include <iostream.h>
 
const int size =4;
 
void print_MAC (int[][size]);   // подключаемая фу-ция для вывода массива
main ()
{   
    int MAC[size][size]={{1,6,2,8},{9,0,7,9},{7,2,4,1},{5,2,1,8}};// предопределенный массив
    print_MAC(MAC);
    
    
    for(int pass=0; pass<(size*size);pass++)//for 1|    проход по всему массиву
    {                                       
        for (int a = 0;a<size;a++)          // for 2|           вторичный проход 
        {   
            for (int b=0;b<size;b++)        // 1 проход  for 3| первичный проход
            {   
                if (a==size-1 && b+1==size)     
                ;                           //пустой оператор для более  
                                            // доходчивого  if'a  
                else                        // "бардюр"
                {
                if (MAC[a][b]>MAC[a][b+1])// меня знак '>' на '<' меняем и  
                                            // сортировку по возрастанию,
                                            // на по убыванию соответственно
                {                                                   
            int hold=MAC[a][b];                         //Сортировка по строке
            MAC[a][b]=MAC[a][b+1];
            MAC[a][b+1]=hold;                           
                }           // сортировка
                }           // закрытие "бардюра"
                
            }               // закрытие for 3
    
        }                   // close for 2
    
    }                       // close for 1
    cout<<endl<<endl;
    print_MAC(MAC);
    return 0;
}
 
 
 
////////////////////////////////////////////////////////////////////////////////
                            // В Ы В О Д   М А С С И В А
////////////////////////////////////////////////////////////////////////////////
void print_MAC (int c[][size])
{   
    cout<<"\n\n";
    for (int A=0; A<size;A++)
    {
        for (int B=0;B<size;B++)
            cout<<c[A][B]<<" ";
        
        cout<<"\n";                     //вывод модифицированного массива
    }
    cout<<"\n\n\n"; 
        
}
////////////////////////////////////////////////////////////////////////////////
Главное помнить, что 5-ый элемент 4-ой строки надо исключать, а то в массив попадет мусор. (MAC[3][4])
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 16:21 #19
кто же так двумерные массивы сортирует...
0
GraBLYA
-46 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 62
16.06.2013, 14:57 #20
Цитата Сообщение от Thinker Посмотреть сообщение
кто же так двумерные массивы сортирует...
я наверно 1-ый

Добавлено через 3 минуты
Цитата Сообщение от Thinker Посмотреть сообщение
кто же так двумерные массивы сортирует...
ведь это все условности двухмерный или двенадцати, только для удобства поиска и яркий пример дискретности
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:03 #21
полазейте по похожей ветке
Сортировка массивов методом пузырька, вставки и быстрым способом
особенно пост #20 посмотрите
0
marat_miaki
109 / 98 / 37
Регистрация: 08.04.2013
Сообщений: 353
16.04.2017, 15:45 #22
Вроде работает на указателях
Кликните здесь для просмотра всего текста
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
 
void sort (int *, int row, int col);// сортирует только строки
void print(int *, int row, int col);
void sortAll (int *p, int row, int col); // сортирует массив целиком на указателях
 
int main()
{
    int row = 5, col =10;
    int mas[row][col];
    int *p = &mas[0][0];
 
  for (int i = 0; i < row*col; ++i)
    *(p + i) = (rand ()%100);
 
    print( p, row, col);
     cout << endl;
 
 // for (int i = 0; i < row; ++i ) // сортирует только строки
 //     sort( p, i, col);
 
 sortAll( p, row, col);
 
    print( p, row, col);
  return 0;
}
 
void sort (int *p, int row, int col)
{
      int N = row*col;
        for (int j = 0; j < col-1; ++j) {
            for (int k = 0; k < col-1; ++k) {
                if ( *(p+N+k) > *(p+N+k+1)) {
                int temp=*(p+N+k); *(p+N+k)=*(p+N+k+1);*(p+N+k+1)=temp;
                }
            }
        }
}
 
void print (int *p, int row, int col) {
   int N = row*col;
   for (int i = 0; i < N; i++)
    {
        if(!(i%col)) cout <<endl;
        cout << setw (3) << *(p + i);
    }
}
 
void sortAll (int *p, int row, int col)
{
      int N = row*col;
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                if ( *(p+i) < *(p+j)) {
                int temp=*(p+i); *(p+i)=*(p+j);*(p+j)=temp;
                }
            }
        }
}
0
16.04.2017, 15:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2017, 15:45
Привет! Вот еще темы с ответами:

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

Сортировка двумерного массива - C++
Подскажите как отсортировать двумерный массив по возрастанию. Например дан такой массив двумерный: 9 7 4 1 2 3 5 5 5 Должен...

сортировка двумерного массива - 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


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

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

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