Текст подпрограммы и версий 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_c производит упорядочивание N последовательно расположенных компонент вектора А по возрастанию абсолютных значений с запоминанием произведенных перестановок в векторе IР.
R.С.Singleton, Аlgorithm 347, an efficient algorithm for sorting with minimal storage, CACM, 12, 3, 1969.
int avz4r_c (real *a, integer *n, integer *ip)
Параметры
a - | вещественный одномерный массив размера по крайней мере n, содержащий компоненты исходного вектора A; по окончании работы подпрограммы содержит абсолютные значения компонент в возрастающем порядке; |
n - | заданное число упорядочиваемых компонент (тип: целый); |
ip - | целый вектор длины n, содержащий информацию о произведенных перестановках при упорядочивании (см. замечания по использованию). |
Версии
avz4d_c - | упорядочивание вектора, заданного с удвоенной точностью, по возрастанию абсолютных значений его компонент с запоминанием произведенных перестановок. |
avz6r_c - | упорядочивание вектора по возрастанию значений его компонент с запоминанием призведенных перестановок. |
avz6d_c - | упорядочивание вектора, заданного с удвоенной точностью, по возрастанию значений его компонент с запоминанием призведенных перестановок. |
Вызываемые подпрограммы: нет
Замечания по использованию
В подпрограммах avz4d_c и avz6d_c параметр a должен иметь тип double. Компонентам целого вектора IP перед началом работы подпрограмм должны быть присвоены следующие значения: IP(1) = 1 , IP(2) = 2 , ... , IP(N) = N . В ходе работы подпрограмм над компонентами вектора IP производятся те же перестановки, что и над компонентами вектора A. В общем случае вектор IP может содержать на входе любую подстановку. По окончании работы подпрограммы avz6r_c и avz6d_c массив a содержит компоненты исходного вектора в возрастающем порядке. |
1. int main(void) { /* Initialized data */ static float a[10] = { 10.f,9.f,8.f,7.f,6.f,5.f,4.f,3.f,2.f,1.f }; static int ipa[10] = { 1,2,3,4,5,6,7,8,9,10 }; /* Local variables */ extern int avz4r_c(float *, int *, int *); static int na, j; na = 10; avz4r_c(a, &na, ipa); 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]); } printf("\n %5i %5i %5i %5i %5i %5i %5i %5i %5i %5i \n", ipa[0], ipa[1], ipa[2], ipa[3], ipa[4], ipa[5], ipa[6], ipa[7], ipa[8], ipa[9]); return 0; } /* main */ Результаты: a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ipa = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1) 2. int main(void) { /* Initialized data */ static float b[10] = { -1.f,-2.f,-3.f,-4.f,-5.f,-6.f,-7.f,-8.f,-9.f,-10.f }; static int ipb[5] = { 1,2,3,4,5 }; /* Local variables */ extern int avz6r_c(float *, int *, int *); static int nb, j; nb = 5; avz6r_c(b, &nb, ipb); 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]); } printf("\n %5i %5i %5i %5i %5i %5i %5i %5i %5i %5i \n", ipb[0], ipb[1], ipb[2], ipb[3], ipb[4]); return 0; } /* main */ Результаты: b = (- 5, - 4, - 3, - 2, - 1, - 6, - 7, - 8, - 9, - 10) ipb = (5, 4, 3, 2, 1)