Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/64: Рейтинг темы: голосов - 64, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
1

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

18.05.2014, 01:02. Показов 12448. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо написать код программы которая сортирует двумерный массив методом Шелла по убыванию. Я нашел код только для одномерного массива. Помогите переделать его для двумерного массива, пожалуйста.

Сам код:
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 минуты
никто не поможет?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2014, 01:02
Ответы с готовыми решениями:

Сортировка методом Шелла по убыванию
Помогите дописать программу в 6 кейсе, что бы там было сортировка методом Шелла по убыванию. ...

Из промежутка [a;b) отсортируйте каждый столбец массива по убыванию методом Шелла
Объявите двумерный вещественный массив, в котором n x m элементов. Выполните генерацию массива...

Сортировка массива методом Шелла
добрый день нужна помощь, есть код #include &lt;iostream&gt; using namespace std; int main() { ...

Сортировка массива методом Шелла пожалуйста
Имеется целочисленный массив ak сщстоящий из 17 элементов: 10, -7, 3, 4, 111, -45, 0, 1234, 52, 77,...

4
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
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


То чем вам не одномерный массив??
0
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 строк? Просто, если я правильно подумал, необходимо двумерный массив перевести в одномерный, отсортировать, перевести в двумерный обратно? Эта схема понятна, но возможно ли избежать перевода в одномерный массив и сразу отсортировать двумерный массив?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
18.05.2014, 04:28 4
Лучший ответ Сообщение было отмечено rafull6 как решение

Решение

элемент 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++)
// ...
}
1
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;
0
18.05.2014, 13:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2014, 13:41
Помогаю со студенческими работами здесь

Сортировка методом Шелла, не простого массива
Нужна помощь в реализации сортировки методом Шелла. Кидаю весь код, на всякий случай. Выдает ошибку...

Сортировка числового массива по возрастанию методом Шелла
Здравствуйте, форумчане. Помогите пожалуйста изменить программу. Есть аналогичная программа...

Сортировка двумерного массива методом qsort
#include &lt;iostream&gt; using namespace std; std::string data; int cmp(const void *a, const void...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru