美文网首页
数组元素左移

数组元素左移

作者: SK_Wang | 来源:发表于2020-04-09 20:50 被阅读0次

设将n(n>1)个整数存放到一维数组R中, 试设计一个在时间和空间两方面都尽可能高效的算法;将R中保存的序列循环左移p个位置(0<p<n)个位置, 即将R中的数据由(x0,x1,......,xn-1)变换为(xp,xp+1,...,xn-1,x0,x1,...,xp-1)。

示例:

输入:pre[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 
     n = 10, p = 3
输出:pre[10] = {3, 4, 5, 6, 7, 8, 9, 0, 1, 2}

解题思路:

先逆置整个数组,再逆置前n-p个元素和后面的p个元素

代码:

typedef struct Node{
    int data;
    struct Node *next;
} Node;
typedef struct Node * LinkList;

void Reverse(int *pre, int left, int right) {
    int i = left;
    int j = right;
    int temp;
    while (i < j) {
        temp = pre[i];
        pre[i] = pre[j];
        pre[j] = temp;
        i++;
        j--;
    }
}

void RotateLeft(int *pre, int n, int p) {
    if (p > 0 && p < n) {
        Reverse(pre, 0, n - 1);
        Reverse(pre, 0, n -1 - p);
        Reverse(pre, n - p, n - 1);
    }
}

相关文章

网友评论

      本文标题:数组元素左移

      本文链接:https://www.haomeiwen.com/subject/invhmhtx.html