43 #include "sinfo_pixel_handling.h"
65 #define PIX_SWAP(a,b) { pixelvalue temp=(a);(a)=(b);(b)=temp; }
66 #define PIX_STACK_SIZE 50
69 sinfo_pixel_qsort(pixelvalue *pix_arr,
int npix)
72 int i_stack[PIX_STACK_SIZE *
sizeof(pixelvalue)];
81 for (j = l + 1; j <= ir; j++) {
83 for (i = j - 1; i >= 1; i--) {
84 if (pix_arr[i - 1] <= a)
86 pix_arr[i] = pix_arr[i - 1];
92 ir = i_stack[j_stack-- - 1];
93 l = i_stack[j_stack-- - 1];
97 PIX_SWAP(pix_arr[k - 1], pix_arr[l])
98 if (pix_arr[l] > pix_arr[ir - 1]) {
99 PIX_SWAP(pix_arr[l], pix_arr[ir - 1])
101 if (pix_arr[l - 1] > pix_arr[ir - 1]) {
102 PIX_SWAP(pix_arr[l - 1], pix_arr[ir - 1])
104 if (pix_arr[l] > pix_arr[l - 1]) {
105 PIX_SWAP(pix_arr[l], pix_arr[l - 1])
113 while (pix_arr[i - 1] < a);
116 while (pix_arr[j - 1] > a);
119 PIX_SWAP(pix_arr[i - 1], pix_arr[j - 1]);
121 pix_arr[l - 1] = pix_arr[j - 1];
124 if (j_stack > PIX_STACK_SIZE) {
128 if (ir - i + 1 >= j - l) {
129 i_stack[j_stack - 1] = ir;
130 i_stack[j_stack - 2] = i;
134 i_stack[j_stack - 1] = j - 1;
135 i_stack[j_stack - 2] = l;
141 #undef PIX_STACK_SIZE