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

C 語言數組原地逆序:雙指針交換標準實現

     編輯:關於C語言

問題描述

將數組元素原地逆序。例:[9,6,5,4,1] → [1,4,5,6,9]。

算法:首尾雙指針交換

時間 O(n),**空間 O(1)**,**原地操作**。

標準 C 代碼


#include <stdio.h>

#define N 5

int main() {
    int a[N] = {9, 6, 5, 4, 1};
    int i, temp;
    
    printf("original array: ");
    for (i = 0; i < N; ++i) printf("%4d", a[i]);
    printf("\n");
    
    // 逆序核心:i 從 0 到 N/2 - 1
    for (i = 0; i < N / 2; ++i) {
        temp = a[i];
        a[i] = a[N - i - 1];
        a[N - i - 1] = temp;
    }
    
    printf("reversed array: ");
    for (i = 0; i < N; ++i) printf("%4d", a[i]);
    printf("\n");
    
    return 0;
}

關鍵點解析

  1. 循環條件 i < N/2:
    - 偶數長度:恰好交換前半與後半
    - 奇數長度:中間元素位置不變,無需交換
  2. 索引映射:a[i] ↔ a[N-i-1]
    - i=0 ↔ N-1(首尾)
    - i=1 ↔ N-2 …
  3. 臨時變量 temp:三步交換法,無異或運算技巧(異或交換有風險)

變體:指針版本


void reverse_array(int *arr, int n) {
    int *left = arr;
    int *right = arr + n - 1;
    while (left < right) {
        int tmp = *left;
        *left++ = *right;
        *right-- = tmp;
    }
}

擴展:標準庫 std::reverse (C++)


#include <algorithm>
#include <vector>

vector<int> v = {9,6,5,4,1};
reverse(v.begin(), v.end()); // 原地逆序

總結

數組逆序是指針/索引操作的入門必考。掌握 i < n/2 邊界、三步交換、指針版寫法,並知道標準庫已提供成熟實現,是基礎功扎實的標誌。

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