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

C 語言數組反轉算法優化:從雷德算法到雙指針法

     編輯:程式設計綜合問答

原代碼問題分析

原代碼嘗試使用「雷德算法」(位反轉置換) 實現數組反轉,但邏輯錯誤導致死循環:

  • 內層 while(k<=i) 條件判斷錯誤
  • 索引 i 更新邏輯混亂,未正確遍歷數組
  • 時間複雜度 O(N log N) 遠高於最優 O(N)

最優解法:雙指針法

#include 
#include 

void reverse(int *dest, const int *src, int n) {
    for (int i = 0, j = n - 1; i < n; i++, j--) {
        dest[i] = src[j];
    }
}

int main() {
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
    int n = sizeof(a) / sizeof(a[0]);
    int *b = malloc(n * sizeof(int));
    
    reverse(b, a, n);
    
    for (int i = 0; i < n; i++) 
        printf("%d ", b[i]);
    putchar('\n');
    
    free(b);
    return 0;
}
// 輸出: 8 7 6 5 4 3 2 1

進階:原地反轉 (空間 O(1))

void reverse_inplace(int *arr, int n) {
    for (int i = 0, j = n - 1; i < j; i++, j--) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

算法對比

算法時間複雜度空間複雜度適用場景
雙指針 (新數組)O(N)O(N)需保留原數組
雙指針 (原地)O(N)O(1)通用首選
位反轉置換O(N log N)O(1)FFT 等特殊場景

結論:數組反轉無需複雜算法,雙指針法簡潔高效,是標準解法。

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