35 #include <cxmessages.h>
49 _giraffe_swap(cxdouble* a, cxdouble* b)
51 register cxdouble tmp = *a;
62 _giraffe_array_heap_sort(cxdouble* array, cxsize size)
65 register cxsize l = size >> 1;
72 register cxsize i = 0;
73 register cxsize j = 0;
75 register cxdouble rra = 0.;
82 array[ir--] = array[0];
94 if (j < ir && (array[j+1] - array[j]) > DBL_EPSILON) {
98 if (array[j] - rra > DBL_EPSILON) {
112 inline static cxdouble
113 _giraffe_array_get_sorted(cxdouble* a, cxint n, cxint k)
116 register cxint l = 0;
117 register cxint m = n - 1;
122 register cxint i = l;
123 register cxint j = m;
125 register cxdouble x = a[k];
130 while (x - a[i] > DBL_EPSILON) {
134 while (a [j] - x > DBL_EPSILON) {
139 _giraffe_swap(&a[i], &a[j]) ;
180 return _giraffe_array_heap_sort(array, size);
186 giraffe_array_mean(
const cxdouble* array, cxsize size)
188 register cxsize i = 0;
190 register cxdouble sum = 0.;
193 for (i = 0; i < size; i++) {
203 giraffe_array_median(
const cxdouble* array, cxsize size)
206 register cxsize position = (size & 1) == 1 ? size / 2 : size / 2 - 1;
208 cxdouble median = 0.;
212 cx_assert(array != NULL);
214 a = cx_calloc(size,
sizeof(cxdouble));
215 memcpy(a, array, size *
sizeof(cxdouble));
218 median = _giraffe_array_get_sorted(a, size, position);
cxint giraffe_array_sort(cxdouble *array, cxsize size)
Sorts an array in ascending order.