|
Вопрос # 2 867/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
дан одномерный массив, отсортированный по возрастанию. нужно вставить в него элемен S, при этом не нарушая упорядочености.
Заранее спасибо!!!
 |
Вопрос задал: I{ () T (статус: Посетитель)
Вопрос отправлен: 31 мая 2009, 08:46
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Проще пареной репы.
Допустим, массив динамический. Тогда:
procedure InsertElement(var A: TDynArray; const X: Integer);
var
Index, Place: Integer;
begin
// Нахожу место, куда вставлять элемент. Как только текущий элемент
// будет не меньше Х - мосто найдено
Place:= Length(A);
for Index:= 0 to Length(A) - 1 do
if A[Index] >= X
then begin
Place:= Index;
Break;
end;
// Сдвигаю элементы в строноу конца массива, начиная с A[Place + 1]
SetLength(A, Length(A) + 1); // <-- увеличиваю длину массива на 1
for Index:= Length(A) - 1 downto Place + 1 do
A[Index]:= A[Index - 1];
// Вставляю Х на место Place
A[Place]:= X;
end;
Код отлажен. Тестовое приложение - в прицепе к ответу. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 31 мая 2009, 10:19
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 31 мая 2009, 11:24; участников в обсуждении: 4.
|
Ozz (статус: Посетитель), 31 мая 2009, 09:40 [#1]:
Т.е. идут например числа от 1 до 8, тебе надо вставить число 5? Если да, то добавь этот элемент в массив и опять отсортируй...
|
|
Dron (статус: Студент), 31 мая 2009, 10:11 [#2]:
Да зачем сортировать заново? Циклом идём по массиву и сравниваем текущий элемент с тем, который нужно вставить. Если текущий стал больше (в случае, если массив по возрастанию), то вставляем наш элемент в предыдущую позицию.
С уважением.
|
|
I{ () T (статус: Посетитель), 31 мая 2009, 10:48 [#3]:
но как добавить?? я код не могу написать как добавить((?? массив по возрастанию
у меня нет мании величия...Великие люди этим не страдают)))
.......лень порождает ненависть к жизни......
|
|
min@y™ (статус: Доктор наук), 31 мая 2009, 11:24 [#4]:
Цитата:
но как добавить?? я код не могу написать как добавить((?? массив по возрастанию
Ты мой ответ смотрел?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|