correct aberation search
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 29 Sep 2025 17:31:52 +0000 (19:31 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 29 Sep 2025 17:32:07 +0000 (19:32 +0200)
test.c

diff --git a/test.c b/test.c
index f91ec7a2814c44381021ecda279253d2ceffd44b..865389f67bdd0b36dda5f100dbe9d724301b0d1b 100644 (file)
--- a/test.c
+++ b/test.c
@@ -169,25 +169,27 @@ int main (int argc, char *argv[])
         }
 
         if (abe_per != 0) {
-            for (int j = 1; j < nb - 1; j++) {
-                int change_done = 0;
-                for (int i = 1; i < nb - 1; i++) {
-                    if (buffer[i + 1] < buffer[i]) {
-                        unsigned int tmp = buffer[i];
-                        buffer[i] = buffer[i + 1];
-                        buffer[i + 1] = tmp;
-                        change_done = 1;
+            int n = nb * abe_per / 100;
+            for (int j = 0; j < n / 2; j++) {
+                int imax = 0;
+                int imin = 0;
+                for (int i = 1; i < nb; i++) {
+                    if (buffer[i] > buffer[imax]) {
+                        imax = i;
+                    }
+                    if (buffer[i] < buffer[imin]) {
+                        imin = i;
                     }
                 }
-                if (!change_done) {
-                    break;
+                for (int i = 0, jump = 0; i < nb; i++) {
+                    if ((i == imax) || (i == imin)) {
+                        jump++;
+                    } else {
+                        buffer[i - jump] = buffer[i];
+                    }
                 }
+                nb -= 2;
             }
-            int n = nb * abe_per / 100;
-            for (int i = 0; i < nb - n; i++) {
-                buffer[i] = buffer[i + n / 2];
-            }
-            nb -= n;
         }
 
         char unit[32] = { 0 };