![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите, пожалуйста.
Преобразовать одномерный массив, состоящий из n вещественных элементов таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом все остальные. |
|
#2
|
||||
|
||||
|
Код:
TArrat.Sort(...) |
|
#3
|
|||
|
|||
|
стандартная сортировка без учета знака. Т.е. я не вижу смысла в попытках писать оптимизированный алгоритм для такого случая. Просто сравнивать надо по модулю:
Код:
var
A : Array Of Double;
procedure SortArrayAbs;
var
I,J : Integer;
B : Double;
begin
For I := Low(A) To High(A)-1 Do
For J := I+1 To High(A) Do
If Abs(A[i]) > Abs(A[J]) Then
Begin
B := A[i];
A[i] := A[J];
A[J] := B;
End;
end; |
|
#4
|
||||
|
||||
|
Цитата:
Интересно, кто придумал деструктивные сортировки? Типа студентов учат (меня в т.ч. тоже так учили) именно на классической деструктивной сортировке. В книге по хаскелю было сразу оговорено: «НЕ НАДО ТАК!» Последний раз редактировалось M.A.D.M.A.N., 02.12.2016 в 08:43. |
|
#5
|
|||
|
|||
|
Да потому что самый простой для понимания и реализации алгоритм.
Понятно, что вызвать заранее написанный QuickSort с передачей компаратора правильнее, но попробуй это преподу объяснить. В лучшем случае заставит самому реализовывать QuickSort... |
|
#6
|
||||
|
||||
|
Не. Деструктивная — в смысле что изменяет входной массив, а не возвращает новый, отсортированный
![]() Ну это так, философский вопрос. |
|
#7
|
|||
|
|||
|
А, в этом смысле...
Ну, опять же, для препода это проще, они к такому привыкли. с другой стороны - это в учебной задаче данных мало... а если данных много? Память не резиновая, а своп сильно замедляет работу... |