以下提供三種三整數排序輸出供參考。
請自行追蹤變數內容。
以下針對 a、b、c 內容值由小而大輸出。
【不改變變數內容之輸出】
if( (a<=b) && (a<=c) && (b<=c) ) printf("%d,%d,%d\n",a, b, c);
if( (a<=b) && (a<=c) && (c<=b) ) printf("%d,%d,%d\n",a, c, b);
if( (b<=a) && (b<=c) && (a<=c) ) printf("%d,%d,%d\n",b, a, c);
if( (b<=a) && (b<=c) && (c<=a) ) printf("%d,%d,%d\n",b, c, a);
if( (c<=b) && (c<=a) && (a<=b) ) printf("%d,%d,%d\n",c, a, b);
if( (c<=b) && (c<=a) && (b<=a) ) printf("%d,%d,%d\n",c, b, a);
註:上式若將所有 <= 改成 < ,則有 bug,試問,在何種情況 bug 會發生?
【改變變數內容之輸出】
if(a>b) { t=a; a=b; b=t; }
if(a>c) { t=a; a=c; c=t; }
if(b>c) { t=b; b=c; c=t; }
printf("%d,%d,%d\n",a,b,c);
【可讀性較差的三元運算(由小至大排序)】
printf("%d,%d,%d\n",
( a<=b ? (a<=c ? a : c) : (b<=c ? b : c)),
( a<=b ? (a<=c ? (b<=c ? b : c) : a) : (a<=c ? a : (b<=c ? c : b))),
( a>=c ? (a>=b ? a : b) : (b>=c ? b : c)));