Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 3
Регистрация: 27.01.2015
Сообщений: 116

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

19.04.2016, 21:30. Показов 2771. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Пытаюсь реализовать сортировку двухмерного массива вставками по характеристике Sum. Компилятор выдает ошибку в функции Sum - жалуется на невозможность чтения памяти переданного массива (там ничего нет?). Может я неверно реализовал сортировку? Подскажите пожалуйста.
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
//Возвращает сумму парных неположительных элементов строки матрицы
int Sum(int *a, int n) {
    int sum = 0;
    for (int i = 1; i < n; i += 2)//Проходимся по парным элементам строки
        if (a[i] <= 0)
            sum += a[i];
    return sum;
}
 
//Сортирует строки матрицы
void Sort(int**arr, int m, int n) {
    int *tmp;
    int i, j, pos;
    for (i = 0; i < m; ++i) // i - номер текущего шага
    {
        pos = i;
        tmp = arr[i];
        for (j = i + 1; j < m; ++j) // цикл выбора наименьшего элемента
        {
            if (Sum(arr[j], n) < Sum(tmp, n))
            {
                pos = j;
                tmp = arr[j];
            }
        }
        for (int k = 0; k < n; k++) {
            arr[k][pos] = arr[k][i];
            arr[i] = tmp; // меняем местами наименьший с a[i]
        }
    }}
Добавлено через 5 часов 45 минут
Попробовал такую реализацию (как по мне логичнее некуда). Все та же ошибка. В чем может быть проблема?
http://ideone.com/YYJCFL
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2016, 21:30
Ответы с готовыми решениями:

Сортировка двухмерного массива
Здравствуйте, Нужно применить сортировку к текстовой базе данных. Поля базы только string. Я записываю БД в двумерный массив string. ...

Сортировка двухмерного массива
Помогите!!!Нужно отсортировать двухмерный массив с использованием указателя. #include&lt;iostream&gt; #include&lt;stdlib.h&gt; ...

Сортировка двухмерного массива по i и j
Нужно написать алгоритм, который создавал бы массив чисел, при чем так, чтобы каждый последующий элемент (по i или по j) был меньше...

8
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
19.04.2016, 21:54
Ascold, у вас что-то в стиле Си получается, но, на самом деле и на Си не похоже ))
В С++ примерно так должно выглядеть (ИМХО):
C++
1
2
3
4
5
6
std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; 
     // sort using the default operator<
    std::sort(s.begin(), s.end());
    for (int a : s) {
        std::cout << a << " ";
    }
0
1 / 1 / 3
Регистрация: 27.01.2015
Сообщений: 116
19.04.2016, 21:57  [ТС]
эмм.. вообще то да.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
19.04.2016, 21:59
Ascold, может саму задачу сформулируете.
0
1 / 1 / 3
Регистрация: 27.01.2015
Сообщений: 116
19.04.2016, 22:03  [ТС]
Нужно отсортировать строки двухмерного массива по возрастанию параметра Sum. Sum это сумма нечетных неположительных элементов строки.
0
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
19.04.2016, 22:34
Так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <algorithm>
 
int main() {
    std::vector<std::vector<int>> a = { { 1,5,4,3 },
                                        { 2,5,1,4 },
                                        { 1,1,6,2 } };
 
    std::sort(begin(a), end(a));  
 
    for (auto& line : a)  
    {
        for (auto& element : line)  
            std::cout << element;
 
        std::cout << std::endl;
    }
    return 0;
}
Добавлено через 2 минуты
А, нечетных и неположительных, боже. Тогда не так

Добавлено через 11 минут
Так?

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
#include <iostream>
#include <vector>
#include <algorithm>
 
int sum(std::vector<int> v) {
    int sum = 0;
    for (int i = 0; i < v.size(); i++) {
        if (v[i] % 2 != 0 && v[i] <= 0)
            sum += v[i];
    }
    return sum;
}
 
bool compare(std::vector<int> v1, std::vector<int> v2) {
    return (sum(v1) > sum(v2));
}
 
int main() {
    std::vector<std::vector<int>> a = { { -1,5,-9,3 },
                                        { 2,-5,1,4 },
                                        { 1,1,-5,-3 } };
 
    std::sort(begin(a), end(a), compare);  
 
    for (auto& line : a)  
    {
        for (auto& element : line)  
            std::cout << element;
 
        std::cout << std::endl;
    }
    return 0;
}
Добавлено через 3 минуты
Я раньше так никогда не "сортировал" матрицы, так что не кричи
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
19.04.2016, 23:01
Ничто не мешает использовать обычный массив типа
C++
1
2
3
4
5
int arr[3][5] = {
    { 1, 2, 3, 4, 5 },
    { 2, 4, 6, 8, 10 },
    { 3, 6, 9, 12, 15 }
};
и цикл for
смотря что требует препод
0
1 / 1 / 3
Регистрация: 27.01.2015
Сообщений: 116
19.04.2016, 23:06  [ТС]
меня не устраивает то, что юзается библиотека algoritm. Нужно реализовать сортировку только стандартными средствами языка (циклы, условные операторы).
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
19.04.2016, 23:18
Ascold, тогда arr[N][M] и цикл for
алгоритм сортировки вставками, например
стр. 258 Р.Сэджвик "Фундаментальные алгоритмы на С++" (можно на С) глава "Сортировка вставками"
в функцию Sum передавайте массив arr[][]

C++
1
2
3
4
const unsigned int N = 10;
const unsigned int M = 10;
 
void f(int arr[N][M]) { ... }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2016, 23:18
Помогаю со студенческими работами здесь

Сортировка двухмерного массива
Дан двухмерный массив. Отсортировать столбики массива, поставив вначале четные элементы,а потом нечетные, не меняя при этом их порядок...

Сортировка вставками двумерного массива
Здравствуйте! Необходимо отсортировать двумерный массив применив сортировку выбором. Отсортировать необходимо каждую строку массива от...

Сортировка строк двухмерного массива
Нужно написать функцию для сортировки двухмерного массива. Пользователь должен выбрать сортировку либо за спадением, либо за возрастанием.

Сортировка двухмерного динамического массива
Доброго времени суток. Столкнулся с проблемой при сортировке двухмерного динамического массива, а именно: первые y-1 элементы (у - число...

Сортировка первого столбца двухмерного массива.
Необходимо отсортировать первый столбец двухмерного массива. Программа кажется это и делает, только почему-то неправильно. Укажите...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru