算法之左旋转字符串(一)

首先说明一下,本类中的很多算法都来源于网友的博客,自己在实现的过程中遇到的和发现的问题在这里说一下,主要是供网友和自己学习交流之用。

#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后面的小括号里是不可以定义变量的,需要拿到外面定义,否则会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值