数组循环左移的一种方法

来源:互联网 发布:java gzip 压缩 乱码 编辑:程序博客网 时间:2024/05/22 09:04



/** *  数组循环左移的一种方法 *  时间复杂度O(n),空间复杂度O(1) */#include <stdio.h>#include <stdlib.h>typedef int element;element a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int gcd(int a, int b) {    if (b == 0)        return a;    else        return gcd(b, a % b);}void leftShift(element * a, int n, int p) {    int i, j, k, m, d, g, M;    element tmp;    g = gcd(p, n);    M = n / g;    for (i = 0; i < g; i++) {        tmp = a[i];        j = i;        for (m = 1; m < M; m++) {            k = (j + p) % n;            a[j] = a[k];            j = k;        }        a[j] = tmp;    }}void printArr() {    int i;    for (i = 0; i < 10; i++)        printf("%d ", a[i]);    putchar('\n');}int main() {    leftShift(a, 10, 4);    printArr();    return 0;}


0 0