数组前后交换
- 项目1假设数组a有n个元素,k(0<=k<=n-1),是一个非负整数。设计一个算法将子数组a[0:k-1]与a[k:n-1]换位。要求最坏情况下时间复杂度为O(n),空间复杂度为O(1)
- 详解:很显然这个要在时间复杂度为O(n),空间复杂度为O(1)的情况下不能开辟新的数组且只能用一层循环这时候,这个时候,我们可以借用一个函数,交换数组内的元素,这样就可以解决问题了。
#include <stdio.h>
void swap(int a[],int low,int high);
void swap(int a[],int low,int high){
int i,j;
for(i=low,j=high;i<j;i++,j--){
int t= a[i];
a[i]=a[j];
a[j]=t;
}
}
int main(){
int l,i;
int k;
int a[80];
printf("请输入数组个数:");
scanf("%d",&l);
printf("请输入交换位置:");
scanf("%d",&k);
printf("请输入数组:\n");
for(i=0;i<l;i++)
{
scanf("%d",&a[i]);
}
swap(a,0,k-1);
swap(a,k,l-1);
swap(a,0,l-1);
printf("交换后的数组为:\n");
for(i=0;i<l;i++)
printf("%d ",a[i]);
}