|
Текст подпрограммы и версий 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)