27 #include <cxmessages.h>
41 _giraffe_swap(cxdouble* a, cxdouble* b)
43 register cxdouble tmp = *a;
54 _giraffe_array_heap_sort(cxdouble* array, cxsize size)
57 register cxsize l = size >> 1;
64 register cxsize i = 0;
65 register cxsize j = 0;
67 register cxdouble rra = 0.;
74 array[ir--] = array[0];
86 if (j < ir && (array[j+1] - array[j]) > DBL_EPSILON) {
90 if (array[j] - rra > DBL_EPSILON) {
104 inline static cxdouble
105 _giraffe_array_get_sorted(cxdouble* a, cxint n, cxint k)
108 register cxint l = 0;
109 register cxint m = n - 1;
114 register cxint i = l;
115 register cxint j = m;
117 register cxdouble x = a[k];
122 while (x - a[i] > DBL_EPSILON) {
126 while (a [j] - x > DBL_EPSILON) {
131 _giraffe_swap(&a[i], &a[j]) ;
172 return _giraffe_array_heap_sort(array, size);
178 giraffe_array_mean(
const cxdouble* array, cxsize size)
180 register cxsize i = 0;
182 register cxdouble sum = 0.;
185 for (i = 0; i < size; i++) {
195 giraffe_array_median(
const cxdouble* array, cxsize size)
198 register cxsize position = (size & 1) == 1 ? size / 2 : size / 2 - 1;
200 cxdouble median = 0.;
204 cx_assert(array != NULL);
206 a = cx_calloc(size,
sizeof(cxdouble));
207 memcpy(a, array, size *
sizeof(cxdouble));
210 median = _giraffe_array_get_sorted(a, size, position);
cxint giraffe_array_sort(cxdouble *array, cxsize size)
Sorts an array in ascending order.