кроссворды, задачки, головоломки

Сборник задач разного уровня сложности по математике, информатике, физике, химии, программированию, экономике etc. Логические задачи, SQL задачи, решение задач. Задачи с ответами, а также нерешённые задачи.

Petruchek.Info

Соединить два массива

Добавлено: 11.02.09 в 12:15
Метки: информатика

Два упорядоченных одномерных массива соединить в один упорядоченный.

Массивы упорядочены в одну сторону.

У этой задачи пока что нет ответа/решения. Вы можете прислать свой вариант в комментарии.

источник: Запорожская городская олимпиада по информатике, 1996

Комментарии
Google says:
глупость (16.02.10):
используем библиотеку известных алгоритмов;
ход 1: соединяем оба массива в один в любом порядке;
ход 2: выполняем любую известную сортировку, например, быструю сортировку Хоара

коммент 1: хитрость в том, что два массива следует рассматривать как один неупорядоченный, тогда задача является обычной задачей на упорядочение массива
коммент 2: задача глупая, как и все "хитрые" задачи типа олимпиадных, потому что такие задачи ищут не собственно решение, а умение решателя проникнуть в мозги постановщика задачи: решатель должен не задачу решить, а найти, какую гадость задумал постановщик
аноним (26.05.10):
нужно 3 индексных переменных допустим i j k соответственно для 1го 2го и результирующего массивов.
в цикле для k сравниваем элементы массивов и добавляем минимальный, а потом увеличиваем его индекс на единицу.
майкл (24.10.10):
тупо
Alexey (09.02.11):
Ну просто применить процедуру merge из сортировки слиянием. (О(n1 + n2))
Создать сбалансированное дерево на основе одного из массивов и вставлять в него второй (O(n2 * lg n1))
Соединить и отсортировать (O(n lg n))
DirectX (24.03.11):
О(n1 + n2) - это правильная оценка. остальное - костыли и индийский код, извините.
аноним (26.05.10) был прав, но страшнее то, что 3 из 4х запаролись на тупой задаче, но знают сорт. Хоара.

1. выделить место под новый массив размера n1 + n2
2. поставить указатели(не буквально, достаточно целочисленных))) ) на элементы концов массивов, являющиемя минимальными в каждом из своих массивов(обобцаем задачу на случай разной упорядоченности)
3. из элементов под указателями берем минимальный. Записываем его зн. на новое место.
4. увеличиваем индекс рецепиента и выбранного донора
5. повторяем с пункта 3, пока не кончится один из доноров
6. дописываем в конец оставшиеся элементы (они уже упорядочены и заведомо больше всех вставленных ранее)
7. ....
8. Профит!!!
Roman (18.05.12):
@DirectX:
Но это не сработает на массивах разной длины.
Если я верно понял идею, то (javascript) реализация нечто вроде:

var a1 = [2,4,6,10,12];
var a2 = [1,2,3,5,6,7,8,9];
var result = [];
var steps = a1.length + a2.length;
for(var i=0, j=0, k=0; k < steps; k++){
if(a1[i] < a2[j]){
result.push(a1[i]);
i++;
}
else {
result.push(a2[j]);
j++;
}
}
console.log(result);
Комментарий от новенького:
Новенький является
Новенький не робот
Знаки на картинке: латинские буквы, арабские цифры


Есть на сайте: Онлайн кроссворды Задачи Онлайн игры Блог
Все работы, опубликованные на сайте — авторские, если не указано иное. Перепечатка возможна только с письменного разрешения владельцев ресурса, с обязательной ссылкой на сайт petruchek.info. Пишите нам: . Сайт должен работать в IE, FF, Opera, Safari.

Реклама:

Разработано в студии "Webous"о проектесайта карта

Реклама: