现在有a, b, c三个值,请比较他们的大小?
易于理解版
public static int findMax(int a, int b, int c)
{
a = a > b ? a : b;
a = a > c ? a : c;
return a;
}
三目运算符进阶版
public static int findMax(int a, int b, int c)
{
a = (a > b ? a : b) > c ? (a > b ? a : b) : c;
return a;
}
利用三目运算符计算三个数的中间值
思想:
先用三目运算符分别计算出max和min,再用a, b, c的和减去max和min就可以得到中间值
public static int findMiddle(int a, int b, int c)
{
int max, min, mid, sum;
max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
min = (a < b ? a : b) < c ? (a < b ? a : b) : c;
mid
return (a + b + c) - max - min;
}
三目运算符的延申
在堆排序中,进行heapify(堆化)操作时,需要判断左右孩子结点是否越界,即存在逻辑与操作时,一定要注意三目运算符的判断条件的形式
可以参考下面带 * 号的注释
// 以非递归的方式实现heapify函数
public static void heapify2(int arr[], int index, int heapSize)
{
int left = 2 * index + 1;
while (left < heapSize)
{
// 先选出左右孩子结点中较大的那个,将比较大的孩子的下标赋值给largest,但是在比较之前要确认右孩子结点是否存在
// * 以下语句不可以写成 int largest = left + 1 < heapSize && arr[left] > arr[left + 1] ? left : left + 1;
int largest = left + 1 < heapSize && arr[left + 1] > arr[left] ? left + 1 : left;
// 再将父节点和值较大的那个孩子结点比较
largest = arr[largest] > arr[index] ? largest : index;
if (index == largest) break;
swap(arr, index, largest);
index = largest;
left = 2 * index + 1;
}
}