leon_ (14.07.2010 17:24, просмотров: 121) ответил Ксения на Сортировка слишком дорого по времени, дешевле сделать (long)double только сумматор. Проблема лишь в том, что long double объявлен вне закона, и его редко кто поддерживает (как со стороны железа, так и компилятора).
Вот набросок, как можно суммировать по возрастанию без сортировки и без учёта соотношения между элементами ( массив, подобный приведённому в изисходном посте, не просуммируется правильно ).
long double sum_matr (long double a[], int col)
{
int i0, i1;
while (1) {
i0 = -1;
i1 = -1;
for (int i = col; i--; )
if (a[i] != 0.0)
if (i0 == -1) {
i0 = i;
} else if (fabsl(a[i0]) > fabsl(a[i])) {
i1 = i0;
i0 = i;
} else if (i1 == -1) {
i1 = i;
} else if (fabsl(a[i1]) > fabsl(a[i])) {
i1 = i;
}
if (i0 == -1) return 0; // Нет ненулевых значений
if (i1 == -1) return a[i0]; // Одно ненулевое значение
a[i0] += a[i1];
a[i1] = 0.0;
}
}