题目描述

编写函数 void fun(int *p, int n) 实现 a 数组的折半交换,主函数定义数组 a[10],输入 nn 个数组元素,定义指针 p 指向数组 a,调用函数进行折半交换,输出交换后的结果。

样例

输入

5
1 2 3 4 5

输出

5 4 3 2 1

算法

(指针交换) O(n)

折半交换的意思是把数组的左右两边交换位置。这里我们可以使用指针进行交换。一开始,我们用指针 p 指向数组的第一个元素,用指针 q 指向数组的最后一个元素,然后交换,直到 p>=q 为止。

时间复杂度

显然,时间复杂度为 O(n)。

代码

void fun(int *p, int n) {
    int *q = p + n - 1;
    while (p < q) {
        int t = *p;
        *p++ = *q;
        *q-- = t;
    }
}

int main() {
    int a[10];
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    fun(a, n);
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}
C语言指针实现数组折半交换

原文地址: https://www.cveoy.top/t/topic/oduR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录