C语言指针实现数组折半交换

本程序使用 C 语言指针实现数组折半交换,即将数组前半部分与后半部分交换位置。

解题思路:

题目要求实现指针折半交换,即将数组前半部分与后半部分交换位置。可以使用指针进行实现,定义两个指针分别指向数组前半部分和后半部分,然后交换指向的值即可。

时间复杂度: O(n)

C语言代码:

#include <stdio.h>

void fun(int *p, int n) {
    int *p1 = p;
    int *p2 = p + n - 1;
    int temp;
    while (p1 < p2) {
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}

int main() {
    int a[10], n, i;
    int *p = a;
    printf("请输入n及n个数组元素:\n");
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    fun(p, n);
    printf("折半交换的结果:\n");
    for (i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    return 0;
}

样例输入:

5 1 2 3 4 5

样例输出:

5 4 3 2 1

解释:

程序首先定义两个指针 p1p2,分别指向数组 a 的首元素和末尾元素。然后使用 while 循环遍历数组,交换 p1p2 指向的值,并同时移动 p1p2 指针,直到 p1 指针大于 p2 指针。

最终,程序将数组 a 的前半部分和后半部分交换位置,并输出交换后的结果。


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

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