首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言三數排序:僅用交換邏輯實現三整數由小到大輸出

     編輯:關於C

演算法邏輯

不使用陣列、不使用排序函式,僅用三次兩兩比較交換:

  1. 比較 a, b,大者後移 → 確保 a <= b
  2. 比較 a, c,大者後移 → 確保 a 為三者最小
  3. 比較 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));

利用總和減去最大最小值得中位數,無需完整排序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved