Чтобы найти значения min , mid и max из 3 значений, вы можете использовать оператор ternary .Вы можете выполнять всю свою работу в основной части кода или разделять вычисления minof3
, midof3
и maxof3
на функции многократного использования.
В случае min и max вы просто делаете 2 из 3 возможных сравнений, а затем возвращаете сравнение результатов.В случае mid , вы делаете то же самое, но вычисляете минимальное и максимальное значения 3, а затем сравниваете все 3 с min и max Чтобы найти значение, которое не является ни min , ни max .(вы можете выполнить эту часть в основном тексте вашего кода без дополнительной функции, объявив значения min и max в качестве переменных и выполнив там исключение).
Собрав части вместе, вы можете сделать что-то похожее наследующий, который принимает первые 3 аргумента в качестве значений для сортировки (или использует значения по умолчанию 99, 231, 8
, если нужное значение не указано)
#include <stdio.h>
#include <stdlib.h>
/** direct ternary comparison of 3 values */
long minof3 (long a, long b, long c) {
long x = a < b ? a : b,
y = a < c ? a : c;
return x < y ? x : y;
}
long maxof3 (long a, long b, long c) {
long x = a > b ? a : b,
y = a > c ? a : c;
return x > y ? x : y;
}
long midof3 (long a, long b, long c) {
long x = minof3 (a, b, c),
z = maxof3 (a, b, c),
y = a == x ? b : a;
return y == z ? c : y;
}
int main (int argc, char **argv) {
long x = argc > 1 ? strtol (argv[1], NULL, 10) : 99,
y = argc > 2 ? strtol (argv[2], NULL, 10) : 231,
z = argc > 3 ? strtol (argv[3], NULL, 10) : 8;
printf ("\n sorted values : %ld, %ld, %ld\n",
minof3 (x, y, z), midof3 (x, y, z), maxof3 (x, y, z));
return 0;
}
Пример использования / Вывод
$ ./bin/sort3
sorted values : 8, 99, 231
$ ./bin/sort3 -23 -281 1031
sorted values : -281, -23, 1031
(да, я знаю, что это старый пост, но, учитывая недавний комментарий о коде, скрытом за функцией swap
, приведен полный пример).