设a[0:n-1]是一个有n个元素的数组,k(0<=k<=n-1)是一个非负整数。
试设计一个算法将子数组a[0:k]与a[k+1,n-1]换位。要求算法在最坏情况下耗时O(n),且只用到O(1)的辅助空间。
试设计一个算法将子数组a[0:k]与a[k+1,n-1]换位。要求算法在最坏情况下耗时O(n),且只用到O(1)的辅助空间。
#include <stdio.h>
#include <stdlib.h>
void Swap(int * a, int left, int right) {
//交换数组left到right的内容
for(; left < right; left++, right--) {
int t = a[left];
a[left] = a[right];
a[right] = t;
}
}
void SwapArray(int * a, int array_size, int x) {
//首先交换第一个子数组的内容
Swap(a, 0, x);
//再交换第二个子数组的内容
Swap(a, x+1, array_size-1);
//交换整个数组的元素
Swap(a, 0, array_size-1);
}
int main() {
int x,i,n;
printf("请输入数组长度:\n");
scanf("%d",&n);
printf("请输入数组元素:");
int * a=(int *) malloc (sizeof(int)*n);
for(i=0;i<n;i++) scanf("%d",&a[i]);
printf("请输入交换位置:");
scanf("%d",&x);
SwapArray(a,n,x);
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
free(a);
}