不使用陣列、不使用排序函式,僅用三次兩兩比較交換:
a, b,大者後移 → 確保 a <= ba, c,大者後移 → 確保 a 為三者最小b, c,大者後移 → 確保 b <= c最終 a <= b <= c 完成排序。
#include <stdio.h>
int main()
{
int a, b, c, t;
printf("請輸入三個整數 a, b, c: ");
scanf("%d %d %d", &a, &b, &c);
if (a > b) { t=a; a=b; b=t; } // a<=b
if (a > c) { t=a; a=c; c=t; } // a 最小
if (b > c) { t=b; b=c; c=t; } // b<=c
printf("由小到大: %d %d %d\n", a, b, c);
return 0;
}
請輸入三個整數 a, b, c: 3 1 2
由小到大: 1 2 3
| 方法 | 比較次數 | 交換次數 | 擴展至 N 數 |
|---|---|---|---|
| 三次兩兩交換 | 3 | ≤3 | 困難(需巢狀迴圈) |
| 選擇排序 | N(N-1)/2 | ≤N | 容易 |
| qsort() | O(N log N) | 不定 | 標準庫一鍵 |
此「硬編碼排序網路」展示了比較器網路概念,適合理解排序本質;但實務上 N>5 即應改用迴圈與陣列。
int median = a + b + c - min(a,min(b,c)) - max(a,max(b,c));
利用總和減去最大最小值得中位數,無需完整排序。