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

Сортировка двумерного массива Методом Шелла (по убыванию) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
18.05.2014, 01:02     Сортировка двумерного массива Методом Шелла (по убыванию) #1
Необходимо написать код программы которая сортирует двумерный массив методом Шелла по убыванию. Я нашел код только для одномерного массива. Помогите переделать его для двумерного массива, пожалуйста.

Сам код:
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
#include <iostream>
using namespace std;
 
int main()
{
    // Считываем размер массива,
    // который необходимо отсортировать
    int size;
    cin >> size;
 
    // Динамически выделяем память под
    // хранение массива размера size
    int *a = new int[size];
    
    // Считываем массив
    for (int i = 0; i < size; i++)
    {
        cin >> a[i];
    }
    int step = size / 2;//инициализируем шаг.
    while (step > 0)//пока шаг не 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //будем идти начиная с i-го элемента
                    while (j >= 0 && a[j] > a[j + step])
                    //пока не пришли к началу массива
                    //и пока рассматриваемый элемент больше
                    //чем элемент находящийся на расстоянии шага
                    {
                        //меняем их местами
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--; 
                    }
                }
                step = step / 2;//уменьшаем шаг
            }    
    // Выводим отсортированный массив
    for (int i = 0; i < size; i++)
    {
        cout << a[i] << ' ';
    }
 
    return 0;
}
Добавлено через 3 часа 43 минуты
никто не поможет?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 01:02     Сортировка двумерного массива Методом Шелла (по убыванию)
Посмотрите здесь:

Сортировка методом Шелла C++
Сортировка методом шелла C++
C++ Сортировка методом Шелла
C++ Сортировка массива методом Шелла
C++ Из промежутка [a;b) отсортируйте каждый столбец массива по убыванию методом Шелла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2134 / 967 / 223
Регистрация: 30.11.2013
Сообщений: 3,235
18.05.2014, 01:39     Сортировка двумерного массива Методом Шелла (по убыванию) #2
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5


Как должно отсортировать?
Если
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1

То повторите ваш код три раза ...
Если
5 5 5 4 4
4 3 3 3 2
2 2 1 1 1


То чем вам не одномерный массив??
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
18.05.2014, 02:56  [ТС]     Сортировка двумерного массива Методом Шелла (по убыванию) #3
rikimaru2013, у меня изначально дан двумерный массив 10х10 с чисами от -200 до 200.
Код который я выложил сортирует одномерный массив, мне же необходимо что бы отсортировался двумерный массив по убыванию. Сортироваться массив должен не по строкам и столбцам а полностью по целому массиву то есть самый первый элемент - самый большой в целом массиве, последний - наименьший.

пример:
если у нас такой массив:
5 6 9 8 4
6 3 2 1 4
6 9 8 7 4

на выходе нужно получить такое:

1 2 3 4 4
4 5 6 6 6
7 8 8 9 9

Добавлено через 51 минуту
rikimaru2013, извините, только сейчас вчитался в ваши слова и понял. Вы правы, это тот самый одномерный массив поделенный на строки. Вопрос, как его разделить на 10 строк? Просто, если я правильно подумал, необходимо двумерный массив перевести в одномерный, отсортировать, перевести в двумерный обратно? Эта схема понятна, но возможно ли избежать перевода в одномерный массив и сразу отсортировать двумерный массив?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2134 / 967 / 223
Регистрация: 30.11.2013
Сообщений: 3,235
18.05.2014, 04:28     Сортировка двумерного массива Методом Шелла (по убыванию) #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
элемент arr[9][9] и arr[0][99] одно и тоже - думаю вы поймёте о чём я

C++
1
2
3
4
5
6
7
8
9
#define SIZE 10
 
void main()
{
int arr[SIZE][SIZE] = {};
 
for(int i-0;i<SIZE*SIZE;i++)
// ...
}
rafull6
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
18.05.2014, 13:41  [ТС]     Сортировка двумерного массива Методом Шелла (по убыванию) #5
rikimaru2013, спасибо за помощь!

Решил таким методом:

C
1
2
3
4
5
6
7
8
9
10
11
12
 int k=0;
 cout<<endl<<"1D Array: ";
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            mas[k]=a[i][j];
            cout<<mas[k]<<" ";
            k++;
        }
    }
  cout<<endl;
Yandex
Объявления
18.05.2014, 13:41     Сортировка двумерного массива Методом Шелла (по убыванию)
Ответ Создать тему
Опции темы

Текущее время: 07:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru