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

C/C++ 數組排序、平均值與極值計算實戰

     編輯:C 語言基礎

前言

數組是 C 語言最基礎的數據結構,排序、求平均、最大/最小值是入門必練的三大經典操作。本文通過一個完整的選擇排序案例,講解數組操作的核心邏輯,並指出代碼中常見的邊界與變量作用域陷阱。

完整代碼:選擇排序 + 統計分析

#include <stdio.h>

// 選擇排序:從小到大
void sort(int array[], int n) {
    for (int i = 0; i < n - 1; ++i) {          // 只需 n-1 輪
        int minIdx = i;                         // 假設當前位置是最小值
        for (int j = i + 1; j < n; ++j) {       // 在未排序區尋找真正最小值
            if (array[j] < array[minIdx]) {
                minIdx = j;
            }
        }
        // 交換
        if (minIdx != i) {
            int tmp = array[i];
            array[i] = array[minIdx];
            array[minIdx] = tmp;
        }
    }
}

int main() {
    int a[10];
    printf("請輸入 10 個整數:\n");
    for (int i = 0; i < 10; ++i) {
        scanf("%d", &a[i]);
    }

    sort(a, 10);

    printf("排序後:");
    for (int i = 0; i < 10; ++i) {
        printf("%d ", a[i]);
    }
    printf("\n");

    // 統計:平均、最大、最小
    int sum = 0, max = a[0], min = a[0];
    for (int i = 0; i < 10; ++i) {
        sum += a[i];
        if (a[i] > max) max = a[i];
        if (a[i] < min) min = a[i];
    }
    printf("平均值:%.2f\n最大值:%d\n最小值:%d\n", (double)sum / 10, max, min);

    return 0;
}

核心邏輯解析

1. 選擇排序

  • 外層循環:i 從 0 到 n-2,每輪確定第 i 位置的最小值。
  • 內層循環:j 從 i+1 到 n-1,掃描未排序區,記錄最小值下標 minIdx。
  • 交換:僅當 minIdx != i 時交換,減少無用操作。
  • 時間複雜度:O(n²),適合小規模數據;大數據請用 qsort。

2. 統計極值與平均

  • 初始化 max = min = a[0],避免魔法數字(如 INT_MIN)。
  • 單次遍歷同時完成求和、找最大、找最小,效率最優。
  • 平均值計算時強制轉 double 防止整數除法截斷。

常見坑點與修正

原代碼問題後果修正
for(i=0;i) 缺少條件編譯錯誤/死循環for(i=0; i<n-1; ++i)
if(array[j]) 判斷非零而非比較大小邏輯錯誤,非負數均視為「更小」if(array[j] < array[minIdx])
交換邏輯把 array[i] 覆寫前未保存數據丟失用 tmp 暫存
局部變量 i,j,k,t 混用、未初始化未定義行為在循環頭部用 int 聲明,就近初始化

進階建議

  1. 使用標準庫:#include <stdlib.h> qsort(a, 10, sizeof(int), cmp_int);,cmp_int 返回 *a - *b。
  2. 泛化排序:傳入比較函數指針,支援任意類型、升降序切換。
  3. 邊界檢查:n <= 0 直接返回,避免空數組崩潰。
  4. 變量作用域最小化:循環變量在 for 內聲明(C99),減少命名汙染與誤用風險。

總結

數組操作看似簡單,卻是指針算術、循環不變式、內存模型的綜合練兵場。寫對這三件小事,對理解鏈表、樹、圖等高級結構大有裨益。記住:先寫正確,再優化;邊界永遠先於邏輯。

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