IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Сортировка двумерного массива, С++
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Нужно отсортировать двумерный массив по строкам насквозь.
Т.е. результат должен выглядеть так:
1 2 3 4
5 6 7 8

ЧЕМ это можно сделать?

qsort не хочет. Думал, а вдруг кто-то адресной арифметикой баловался при его написании, хотя это вряд ли кто-то делал, ведь сортировка Хоара для этого не сильно подходит. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


qsort должен работать


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Нужно отсортировать двумерный массив по строкам насквозь.
Как задан двумерный массив, можно уточнить? Статический? Или динамический?

Вообще-то со статическим std::sort прекрасно справляется:

const int n_cols = 5;
const int n_rows = 2;

int arr[n_rows][n_cols] =
{
{ 4, 6, 8, 9, 1 },
{ 7, 0, 2, 3, 5 }
};

// ...
std::sort(*arr, *arr + n_rows * n_cols);
// ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Динамический.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


В таком случае тебе надо писать сортировку самому, ни один стандартный метод не будет сортировать массив, который не расположен в одном куске памяти. А динамический массив (я имею в виду вот такой:
    int **arr = new int*[n_rows];
for(int i = 0; i < n_rows; ++i)
{
arr[i] = new int[n_cols];
// ...
}

) как раз-таки и расположен черт знает как. Одна строка может быть здесь, другая - где-то в другом месте...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Динамический.

С этого бы и начал.

Создавай динамический двумерный массив так, чтобы данные располагались последовательно. То есть выделяешь линейный участок Mem под x*y элементов, также для удобства выделяешь участок Lines под y указателей на элементы - в нём хранишь указатели на начала строк (Lines[j] = Mem[j*x]). К элементу (i,j) обращаешься как Lines[j,i].

Сообщение отредактировано: TarasBer -


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Цитата
как раз-таки и расположен черт знает как. Одна строка может быть здесь, другая - где-то в другом месте
Блин, я об этом и забыл подумать. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.12.2021 19:46
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name