}
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 };