首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言有序陣列插入演算法:雙重迴圈移動元素與索引邊界修正完整程式碼

     編輯:程式設計綜合問答

題目需求

輸入 10 個已排序整數存入陣列 b,再輸入 5 個整數 x 依序插入並保持有序,最終輸出 15 個元素。

修正後完整程式碼


#include <stdio.h>

void input(int a[], int n) {
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
}

void insert(int a[], int n, int x) {
    int i;
    for (i = 0; i < n; i++)
        if (x < a[i]) break; // 找到插入位置
    // 從後向前移動元素騰出位置
    for (int j = n; j > i; j--)
        a[j] = a[j - 1];
    a[i] = x;
}

void output(int a[], int n) {
    for (int i = 0; i < n; i++) printf("%d ", a[i]);
    printf("\n");
}

int main() {
    int b[100], c[5];
    input(b, 10);
    input(c, 5);
    for (int i = 0; i < 5; i++)
        insert(b, 10 + i, c[i]); // 每次插入後有效長度 +1
    output(b, 15);
    return 0;
}

關鍵修正點

  • scanf("%d") 而非 %c 讀取整數。
  • 插入位置判斷 x < a[i](遞增序)。
  • 移動元素迴圈 j = n; j > i; j-- 從後往前,避免覆蓋。
  • 主程式每次插入傳遞當前有效長度 10+i。

執行範例


輸入 b: 1 3 5 7 9 11 13 15 17 19
輸入 c: 2 4 6 8 10
輸出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

總結

有序陣列插入核心:二分查找定位(或線性掃描)→ 從尾部向前移動元素 → 放入新值。注意迴圈邊界與有效長度更新。

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