Текст подпрограммы и версий
avz3r_c.zip  avz3d_c.zip  avz5r_c.zip  avz5d_c.zip 
Тексты тестовых примеров
tavz3r_c.zip  tavz3d_c.zip  tavz5r_c.zip  tavz5d_c.zip 

Подпрограмма:  avz3r_c (версия avz5r_c)

Назначение

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

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

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

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

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

    int avz3r_c (real *a, integer *n)

Параметры

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

Версии

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

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

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

 

В подпрограмах avz3d_c и avz5d_c параметр  a должен иметь тип double.

По окончании работы подпрограмм avz5r_c и avz5d_c массив  a содержит компоненты исходного вектора A возрастающем порядке.

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

1.
int main(void)
{
    /* Initialized data */
    static float a[10] = { -1.f,1.5f,-2.f,2.5f,-3.f,3.5f,-4.f,4.5f,-5.f,5.5f };

    /* Local variables */
    extern int avz3r_c(float *, int *);
    static int n, j;

    n = 10;
    avz3r_c(a, &n);

    for (j = 0; j <= 5; j += 5) {
         printf("\n  %13.5e %13.5e %13.5e %13.5e %13.5e \n",
                a[j], a[j+1], a[j+2], a[j+3], a[j+4]);
    }
    return 0;
} /* main */
      

Результат:

       a = (1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 5.5) 

1.
int main(void)
{
    /* Initialized data */
    static float ba[10] = {-1.f,1.5f,-2.f,2.5f,-3.f,3.5f,-4.f,4.5f,-5.f,5.5f };

    /* Local variables */
    extern int avz5r_c(float *, int *);
    static int n, j;

    n = 10;
    avz5r_c(b, &n);

    for (j = 0; j <= 5; j += 5) {
         printf("\n  %13.5e %13.5e %13.5e %13.5e %13.5e \n",
                b[j], b[j+1], b[j+2], b[j+3], b[j+4]);
    }
    return 0;
} /* main */
      

Результат:

       b = (- 5., - 4., - 3., - 2., - 1., 1.5, 2.5, 3.5, 4.5, 5.5)