首先说明一下,本类中的很多算法都来源于网友的博客,自己在实现的过程中遇到的和发现的问题在这里说一下,主要是供网友和自己学习交流之用。
#include <stdio.h>
#include <string.h>
//将数组中元素右移一位,arr代表数组,N是数组中元素个数,K是移动的位数
void rightShift(int*arr,int N,int k)
{
int i;
int j;
k%=N;
while(k--)
{
int m=arr[N-1];
for(i=N-1;i>0;i--)
{
arr[i]=arr[i-1];
}
arr[0]=m;
}
for(j=0;j<N;j++)
{
printf("%d",arr[j]);
}
}
void main()
{ int arr1[]={1,2,3,4,5,6,7,8};
rightShift(arr1,8,9);
}
这个算法主要是引入左旋字符串之前所要简述的一个算法。是 将一个给定字符串向右移动固定位数,如果不加k%=N,(比如说一个数组有8个元素,如果向右移动9位,就代表向右移动了一位)事件复杂度为o(k*N);加上之后,时间复杂度为0(N*N).
另外,需要注意的是,在C语言里,for后面的小括号里是不可以定义变量的,需要拿到外面定义,否则会出错。