数组逆置问题
问题描述
设a[0:n-1]是有n个元素的数组,k(0=<k=<n-1)是一个非负整数。试设计一个算法将子数组 a[0:k-1]与a[k:n-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); //交换0 - k-1的数组元素
swap(a,k,l-1);//交换k-1 - l-1的数组元素
swap(a,0,l-1);//整体交换
printf("交换后的数组为:\n");
for(i=0;i<l;i++)
printf("%d ",a[i]);
}