#include <iostream>
using namespace std;
//最快的数组逆置和数组左旋算法
//最快的数组逆置算法,复杂度为O(n/2)
void rever(int a[],int size){
//i记录数组头,j记录数组尾
for (int i=0,j=size-1;i<j;i++,j--)
{
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
//这里注意使用for和while的不同,在特定情况下
//使用for比使用while具有更好的简洁性和可读性
/*int i=0;
int j=size-1;
while (i<j)
{
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
i++;
j--;
}*/
}
//在O(n)的时间复杂度实现数组向左旋转pos位
void rot(int a[],int pos,int size){
rever(a,pos);
rever(a+pos,size-pos);
rever(a,size);
}
//在O(n*n)的时间复杂度实现向左旋转pos位
void rot1(int a[],int pos,int size){
for (int i=pos; i<size; i++)
{
//j记录移动步数,k记录当前位置
for (int j=pos,k=i;j>0;j--,k--)
{
int tmp=a[k];
a[k]=a[k-1];
a[k-1]=tmp;
}
}
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9};
//rever(a,6);
rot(a,4,9);
//rot1(a,4,9);
for(int i=0;i<9;i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
最快的数组逆置和数组左旋算法
最新推荐文章于 2024-01-07 21:41:03 发布