Текст подпрограммы и версий ( Фортран )
avz4r.zip  avz4d.zip  avz6r.zip  avz6d.zip 
Тексты тестовых примеров ( Фортран )
tavz4r.zip  tavz4d.zip  tavz6r.zip  tavz6d.zip 
Текст подпрограммы и версий ( Си )
avz4r_c.zip  avz4d_c.zip  avz6r_c.zip  avz6d_c.zip 
Тексты тестовых примеров ( Си )
tavz4r_c.zip  tavz4d_c.zip  tavz6r_c.zip  tavz6d_c.zip 
Текст подпрограммы и версий ( Паскаль )
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 (версия AVZ6R)

Назначение

Упорядочивание вектора по возрастанию абсолютных значений его компонент с запоминанием произведенных перестановок.

Математическое описание

АVZ4R производит упорядочивание  N последовательно расположенных компонент вектора  А по возрастанию абсолютных значений с запоминанием произведенных перестановок в векторе IР.

R.С.Singleton, Аlgorithm 347, an efficient algorithm for sorting with minimal storage, CACM, 12, 3, 1969.

Использование

    SUBROUTINE  AVZ4R (A, N, IP) 

Параметры

A - вещественный одномерный массив размера по крайней мере  N, содержащий компоненты исходного вектора  A; по окончании работы подпрограммы содержит абсолютные значения компонент в возрастающем порядке;
N - заданное число упорядочиваемых компонент (тип: целый);
IP - целый вектор длины  N, содержащий информацию о произведенных перестановках при упорядочивании (см. замечания по использованию).

Версии

AVZ4D - упорядочивание вектора, заданного с удвоенной точностью, по возрастанию абсолютных значений его компонент с запоминанием произведенных перестановок.
AVZ6R - упорядочивание вектора по возрастанию значений его компонент с запоминанием призведенных перестановок.
AVZ6D - упорядочивание вектора, заданного с удвоенной точностью, по возрастанию значений его компонент с запоминанием призведенных перестановок.

Вызываемые подпрограммы: нет

Замечания по использованию

 

В подпрограммах АVZ4D и АVZ6D параметр  А должен иметь тип DОUВLЕ РRЕСISIОN.

Компонентам целого вектора IР перед началом работы подпрограмм должны быть присвоены следующие значения:

              IР(1) = 1 ,  IР(2) = 2 , ... ,  IР(N) = N . 

В ходе работы подпрограмм над компонентами вектора IР производятся те же перестановки, что и над компонентами вектора  А. В общем случае вектор IР может содержать на входе любую подстановку.

По окончании работы подпрограммы АVZ6R и АVZ6D массив  А содержит компоненты исходного вектора в возрастающем порядке.

Пример использования

      DIMENSION  A(10), B(10), IPA(10), IPB(5)
      DATA  A /10., 9., 8., 7., 6., 5., 4., 3., 2., 1./
      DATA  B /- 1., - 2., - 3., - 4., - 5., - 6., - 7., - 8., - 9., - 10./
      DATA  IPA /1, 2, 3, 4, 5, 6, 7, 8, 9, 10/
      DATA  IPB /1, 2, 3, 4, 5/
      NA = 10
      NB = 5
      CALL  AVZ4R (A, NA, IPA)
      CALL  AVZ6R (B, NB, IPB)

Результаты:

       А     =  (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
       IPA  =  (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

       B     =  (- 5, - 4, - 3, - 2, - 1, - 6, - 7, - 8, - 9, - 10)
       IPB  =  (5, 4, 3, 2, 1)