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

Сортировка связанного двумерного массива

14.10.2015, 17:26. Показов 1141. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть входные данные вида:
Bash
1
2
3
4
5
1112    576 
1113    577 
1114    578 
1115    579 
1116    580
Данные - это x и y координаты. Их необходимо отсортировать пары по y координате(второй столбец). Результатом должен быть динамический сишный массив. Решил задачу, однако уж больно быдлокодом несет... Как надо было делать по человечески?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    
    // inputTextStr - стринг с исходными данными.
    // arrSizeX - содержит количество координат(1 пара = 2 координаты).
 
    int arrSizeX = getSize()
    int* arr = new int[arrSizeX];
 
    int posStart = 0;
    int posEnd = 0;
    for (int i = 1; i < arrSizeX; i+=3){
 
        posEnd = inputTextStr.find('\t', posStart);
        arr[i] = stoi(inputTextStr.substr(posStart, posEnd - posStart));
        posStart = posEnd + 1;
        i--;
 
        posEnd = inputTextStr.find('\t', posStart);
        arr[i] = stoi(inputTextStr.substr(posStart, posEnd - posStart));
        posStart = posEnd + 2;
    }
    qsort(arr, arrSizeX/2, sizeof(long long), compare);
Несколько смущает использование одномерного массива.
Сильно смущает сортировка по long long, хотя бесспорно рабтает.
Смена мест столбцов значения практического значения не имеет, сделана для сортировки long long. Хотя тоже какие-то лишние перестановки не радуют.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2015, 17:26
Ответы с готовыми решениями:

Сортировка связанного массива
Доброго времени суток. У меня к вам такой вопрос, заданы два массива допустим х y они связаны...

Сортировка двумерного массива
Добрый день. Дано было такое задание . &quot;Даны два числа n и m. Создать матрицу размером и...

Сортировка двумерного массива
Нужно отсортировать массив. Мой алгоритм сортирует каждую строку в отдельности. Как отсортировать...

Сортировка двумерного массива
Input sample: 4 10 20 30 7 30 00 23 59 59 13 30 30 Output sample: 7 30 0 10 20 30

3
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,669
14.10.2015, 20:09 2
Это вообще работает?
Я не понял, как ты заполняешь массив, почему i+=3, и в середине i--. Если записываешь по 2 числа, то должно быть i += 2. И почему индексация с единицы?
long long зачем, если ты его не используешь нигде?
0
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
14.10.2015, 22:16  [ТС] 3
Это работает и работает отлично.
Цитата Сообщение от nmcf Посмотреть сообщение
Если записываешь по 2 числа, то должно быть i += 2.
Все верно. i+=3 и i--, как раз дадут 2.
Цитата Сообщение от nmcf Посмотреть сообщение
почему индексация с единицы?
Индексация с единицы, собственно, как и финт с i+=3 и i--, используется для того, чтобы при парсинге входной строки первый элемент в строке падал во второй столбец, а второй элемент в первый столбец. Т.е. по сути столбцы меняются местами во время парсинга.
Цитата Сообщение от nmcf Посмотреть сообщение
long long зачем, если ты его не используешь нигде?
А вот это великий велосипед. Мы имеем массив инт значений. Если мы будем оперировать с интом, как с лонг лонг, то мы будем хватать значения парами. Т.е. мы имеем входные данные:
0 9
1 8
2 7
3 6
4 5
После парсинга они в памяти хранятся, как:
9 0 8 1 7 2 6 3 4 5
Для удобства напишу столбиком попарно:
9 0
8 1
7 2
6 3
4 5
Т.е. у нас те же самые данные, но столбцы поменены местами.
Цель смены мест в том, чтобы стобец по которому будет производится сортировка, был по сути старшим битом.
Если рассмотреть пару интов, в виде лонг лонга, то столбец по которому происходит сортировка будет определять порядок.
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,669
14.10.2015, 23:17 4
Лучший ответ Сообщение было отмечено DarkMasterW как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
    struct xy
    {
        int x, y;
    };
 
    int arrSizeX = getSize() / 2;
    xy* arr = new xy[arrSizeX];
 
    std::istringstream iss(inputTextStr);
    for (int i = 0; i < arrSizeX; ++i) iss >> arr[i].x >> arr[i].y;
 
    std::sort(arr, arr + arrSizeX, [](ab a, ab b){ return a.y < b.y; });
1
14.10.2015, 23:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2015, 23:17
Помогаю со студенческими работами здесь

Сортировка двумерного массива
Здесь код, который вычисляет произведения всех отрицательных чисел каждой строки. Вконце концов мне...

Сортировка двумерного массива
Есть задачка с 3-ох пунктов. Первый я сделал(создать многомерный целочисельный масив заданый...

Сортировка двумерного массива...
Дано: одномерный массив А заполненный случайными числами одномерный массив В заполненный...

Сортировка двумерного массива
Массивы


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

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