Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка двумерного массива
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
sheka
Нужно отсортировать двумерный массив по строкам насквозь.
Т.е. результат должен выглядеть так:
1 2 3 4
5 6 7 8

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

qsort не хочет. Думал, а вдруг кто-то адресной арифметикой баловался при его написании, хотя это вряд ли кто-то делал, ведь сортировка Хоара для этого не сильно подходит. smile.gif
TarasBer
qsort должен работать
IUnknown
Цитата
Нужно отсортировать двумерный массив по строкам насквозь.
Как задан двумерный массив, можно уточнить? Статический? Или динамический?

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

) как раз-таки и расположен черт знает как. Одна строка может быть здесь, другая - где-то в другом месте...
TarasBer
> Динамический.

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

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