Текст подпрограммы и версий avz4r_p.zip avz4e_p.zip avz6r_p.zip avz6e_p.zip |
Тексты тестовых примеров tavz4r_p.zip tavz4e_p.zip tavz6r_p.zip tavz6e_p.zip |
Упорядочивание вектора по возрастанию абсолютных значений его компонент с запоминанием произведенных перестановок.
AVZ4R производит упорядочивание N последовательно расположенных компонент вектора А по возрастанию абсолютных значений с запоминанием произведенных перестановок в векторе IР.
R.С.Singleton, Аlgorithm 347, an efficient algorithm for sorting with minimal storage, CACM, 12, 3, 1969.
procedure AVZ4R(var A :Array of Real; N :Integer; var IP :Array of Integer);
Параметры
A - | вещественный одномерный массив размера по крайней мере N, содержащий компоненты исходного вектора A; по окончании работы подпрограммы содержит абсолютные значения компонент в возрастающем порядке; |
N - | заданное число упорядочиваемых компонент (тип: целый); |
IP - | целый вектор длины N, содержащий информацию о произведенных перестановках при упорядочивании (см. замечания по использованию). |
Версии
AVZ4E - | упорядочивание вектора, заданного с расширенной (Extended) точностью, по возрастанию абсолютных значений его компонент с запоминанием произведенных перестановок. |
AVZ6R - | упорядочивание вектора по возрастанию значений его компонент с запоминанием призведенных перестановок. |
AVZ6E - | упорядочивание вектора, заданного с расширенной (Extended) точностью, по возрастанию значений его компонент с запоминанием призведенных перестановок. |
Вызываемые подпрограммы: нет
Замечания по использованию
В подпрограммах АVZ4E и АVZ6E параметр А должен иметь тип Extended. Компонентам целого вектора IР перед началом работы подпрограмм должны быть присвоены следующие значения: IР(1) = 1 , IР(2) = 2 , ... , IР(N) = N . В ходе работы подпрограмм над компонентами вектора IР производятся те же перестановки, что и над компонентами вектора А. В общем случае вектор IР может содержать на входе любую подстановку. По окончании работы подпрограммы АVZ6R и АVZ6E массив А содержит компоненты исходного вектора в возрастающем порядке. |
1. Unit Tavz4r_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AVZ4R_p; function Tavz4r: String; implementation function Tavz4r: String; var NA,_i :Integer; const A :Array [0..9] of Real = ( 10.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0,1.0 ); IРА :Array [0..9] of Integer = ( 1,2,3,4,5,6,7,8,9,10 ); begin Result := ''; NA := 10; AVZ4R(A,NA,IPA); Result := Result + #$0D#$0A; for _i:=0 to 9 do begin Result := Result + Format('%20.16f ',[A[_i]]); if ( ((_i+1) mod 5)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 9 do begin Result := Result + Format('%5d',[IPA[_i]]); if ( ((_i+1) mod 1)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('Tavz4r',Result); { вывод результатов в файл Tavz4r.res } exit; end; end. Результаты: А = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) IPA = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1) 2. Unit Tavz6r_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AVZ6R_p; function Tavz6r: String; implementation function Tavz6r: String; var NB,_i :Integer; const B :Array [0..9] of Real = ( -1.,-2.,-3.,-4.,-5.,-6.,-7.,-8.,-9.,-10. ); IРB :Array [0..5] of Integer = ( 1,2,3,4,5 ); begin Result := ''; NB := 5; AVZ6R(B,NB,IPB); Result := Result + #$0D#$0A; for _i:=0 to 9 do begin Result := Result + Format('%20.16f ',[B[_i]]); if ( ((_i+1) mod 5)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 9 do begin Result := Result + Format('%5d',[IPB[_i]]); if ( ((_i+1) mod 1)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('Tavz6r',Result); { вывод результатов в файл Tavz6r.res } exit; end; end. Результаты: B = (- 5, - 4, - 3, - 2, - 1, - 6, - 7, - 8, - 9, - 10) IPB = (5, 4, 3, 2, 1)