пятница, 31 августа 2012 г.

Одномерные массивы

-->
Дан массив с известной размерностью. Размерность указать константой. Требуется выполнить следующее:

Вывести массив на экран в обратном порядке
(1 2 3 = 3 2 1)

Найти наименьший элемент и наименьший элемент по модулю.

Найти и вывести на экран такие элементы, у которых оба соседних элемента как и сам он делятся нацело на одно и то же число

Выполнить пузырьковую сортировку массива по возрастанию и вывести исходный массив и обработанный на экран

Дать выбрать пользователю способ ввода данных в массив (ручной или случайный автоматический) и создать массив согласно выбранному условию

После заполнения массива прибавить к каждому элементу число 5 и вывести на экран

После заполнения массива прибавить к каждому третьему элементу число, которое находится в левом соседнем элементе

После заполнения массива прибавить к каждому элементу сумму чисел, которые являются его соседями  через один
(1 2 3 4 5) = (0+1+3   0+2+4   1+3+5   2+4+0   3+5+0   5+0+0) = (4  6  9  6  5)

Найти сумму и произведение всех элементов массива

Посчитать в массиве сумму всех элементов, входящих в диапазон [a..b]. a и b задаются во время  выполнения программы

Определить сколько в массиве пар одинаковых элементов

Определить сколько в массиве элементов, равных сумме всех элементов массива

Найти номера максимального и минимального элемента. Определить сами элементы и вывести на экран, что минимальный элемент равен столько-то и его позиция такая-то и также про максимальный

Поменять местами наибольший элемент с наименьшим

Растасовать массив следующим образом
(1 2 3 4 5 6 7) = (2 1 4 3 6 5 7)

Найти сумму всех чисел на диапазоне минимальный - максимальный элементы. Вычислить разность по Максимальный-Минимальный и прибавить к той сумме.

Заменить число суммой двух предыдущих

Найти и просуммировать все просты числа внутри массива

Пользователь задает интервал а-b  Написать все элементы массива, которые не попадают в этот интервал. a и b - это индексы элементов массива

 Просуммируйте элементы двух массивов

Найти среднее арифметическое всех элементов массива и посчитать количество чисел внутри массива не превышающих найденное

Посчитать процент вхождения каждого из чисел в массив и вывести результаты на экран. При выводе на экран числа не должны повторяться

Сожмите заданный массив отбрасыванием нулевых элементов

Посчитайте наибольшее число идущих подряд элементов

Предложите пользователю ввести число N. Сдвиньте все элементы массива вправо (влево) на N элементов
===========================================================
В программировании используют разные алгоритмы сортировок. Часто требуется упорядочить массив по каким-то критериям. Имеет смысл изучить и реализовать самому некоторые виды известных способов сортировок. Привожу названия:

Сортировка выбором поиск наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного списка

Сортировка пузырьком для каждой пары индексов производится обмен, если элементы расположены не по порядку

Сортировка перемешиванием разновидность пузырьковой сортировки, в котором границы рабочей части массива (т.е. части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. Массив просматривается поочередно справа налево и слева направо.

Гномья сортировка Алгоритм находит первое место, где два соседних элемента стоят в неправильном порядке и меняет их местами. Он пользуется тем фактом, что обмен может породить новую пару, стоящую в неправильном порядке, только до или после переставленных элементов. Он не допускает, что элементы после текущей позиции отсортированы, таким образом, нужно только проверить позицию до переставленных элементов.

Сортировка вставками определяем где текущий элемент должен находиться в упорядоченном списке и вставляем его туда

Сортировка слиянием  выстраиваем первую и вторую половину списка отдельно, а затем — сливаем упорядоченные списки

Сортировка с помощью двоичного дерева универсальный алгоритм сортировки, заключающийся в построении двоичного дерева поиска по ключам массива (списка), с последующей сборкой результирующего массива путём обхода узлов построенного дерева в необходимом порядке следования ключей. Данная сортировка является оптимальной при получении данных путём непосредственного чтения с потока (например с файла, сокета или консоли).


Алгоритм сортировки Timsort Основная идея алгоритма в том, что в реальном мире сортируемые массивы данных часто содержат в себе упорядоченные подмассивы.

Сортировка подсчётом  используется диапазон чисел сортируемого массива (списка) для подсчёта совпадающих элементов. Применение сортировки подсчётом целесообразно лишь тогда, когда сортируемые числа имеют (или их можно отобразить в) диапазон возможных значений, который достаточно мал по сравнению с сортируемым множеством, например, миллион натуральных чисел меньших 1000. Эффективность алгоритма падает, если при попадании нескольких различных элементов в одну ячейку, их надо дополнительно сортировать. Необходимость сортировки внутри ячеек лишает алгоритм смысла, так как каждый элемент придётся просматривать более одного раза.

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

Сортировка расческой В сортировке пузырьком, когда сравниваются два элемента, промежуток (расстояние друг от друга) равен 1. Основная идея сортировки расчёской в том, что этот промежуток может быть гораздо больше, чем единица

Пирамидальная сортировка превращаем список в кучу, берём наибольший элемент и добавляем его в конец списка

Плавная сортировка

Быстрая сортировка  широко известен как быстрейший из известных для упорядочения больших случайных списков; с разбиением исходного набора данных на две половины так, что любой элемент первой половины упорядочен относительно любого элемента второй половины; затем алгоритм применяется рекурсивно к каждой половине

Поразрядная сортировка

 =========================
  Есть еще разные алгоритмы, но даже все, которые назвал я знать не обязательно. Названия и описания взяты из Википедии. Если есть спортивный интерес и уйма времени, то можно разобрать все. Иначе имеет смысл разобрать сортировки по классам сложности

Уровень сложности O(N*N) = Вставкой, Выбором
Уровень сложности O(N*log(N)) = Быстрая, Слиянием, Пирамидальная
Уровень сложности O(N) = Подсчетом, Поразрядная

*Пирамидальная требует знаний по динамическим структурам данных
===============================

Отсортируйте массив и Выполните логарифмический поиск внутри массива для определения наличия и позиции числа, введенного пользователем

Отсортируйте массив и Выполните бинарный поиск внутри массива для определения наличия и позиции числа, введенного пользователем

Выполните сортировку массива следующим образом. Все числа меньшие первого должны предшествовать этому первому числу, а все большие него идти за ним

-->
Создайте динамический массив и заполните его любыми значениями. Нужно добавить к этому массиву дополнительной памяти и дописать туда новые значения не затирая основного массива. Проверьте работоспособность с помощью цикла (например внутри цикла 1000 раз должно произойти такое дополнение памяти)

В одномерном массиве из 100 элементов имеются нули. 
Ваша задача  На каждом четном диапазоне [0..0] заменить элементы на девятки
Например:    0  3  9  0  1  8  1  4  9  7  6  0  1  3 ---> 0  3  9  0  9  9  9  9  9  9  9  0  1  3

Задан массив из множества случайных элементов. 
Ваша задача Посчитать количество участков на которых элементы массива возрастают и посчитать количесвто участков, на которых элементы массива убывают

Ваша задача Посчитать в массиве серию самых больших, стоящих подряд четных элементов

Задан статический массив из 100 элементов. 
Ваша задача Сжать массив, удалив все нули

Задан массив. После запуска программы пользователь вводит число.
Ваша задача Найти число, которое ближе всех к указанному числу (ответ может состоять из двух чисел - и +)

Ваша задача Найти среднее арифметическое всех элементов массива. Найти элемент массива, который ближе всех к найденному значению и сжать массив, удалив все такие значения.

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

Задан массив из N элементов
Ваша задача Создать одно число из этих элементов массива

Задан массив из N вещественных значений.
Ваша задача Найти сумму только тех значений, которые являются дробными

Задано три массива (M1,M2,M3) Во всех массивах есть как минимум одно общее число.
Ваша задача Найти первое общее число (например во всех трех массивах встречается общее число 5) 

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

1 комментарий: