#include<stdio.h>
#include<stdlib.h>
///部分数组元素调换
void move(int *arr,int n,int m)
{
if(m<0 || m>=n)//如果移动个数小于0或者移动个数大于总数则返回。
{
return ;
}
//malloc主动从堆区动态申请一块空间。
int *brr = (int *)malloc(m*sizeof(int));//先将要前移的数组定义出来
int i;
for(i=0;i<m;i++)//将后面的数据复制下来
{
brr[i]=arr[n-m+i];
}
for(i=n-m-1;i>=0;i--)//将前面的数据后移,先移动后面的数据
{
arr[i+m] = arr[i];
}
for(i=0;i<m;i++)//将brr中的数据复制到arr中
{
arr[i]=brr[i];
}
free(brr);//将申请的空间释放。
}
void show(int *arr,int len)//打印函数
{
for(int i=0;i<len;i++)
printf("%d ",arr[i]);
printf("\n");
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
move(arr,sizeof(arr)/sizeof(arr[0]),3);//将后面的三个数移置最前方。
show(arr,sizeof(arr)/sizeof(arr[0]));
}
我们来看一下Move函数实现的具体步骤:
1.先将arr[n-m+i]的值赋给brr[i]
2.再将arr的前7项分别向后移3位
注意:
此方法下只能先将后面的数往后移 ,即7先往后移,如果先移1的话,就会把后面的值覆盖
所以从7开始传 7的下标6,即(n-m-1)
3再将brr中的8,9,10赋给arr