Microsoft 数组移位

本文介绍了两种将数组的一部分元素循环移至数组末尾的算法实现。第一种方法通过三次逆置操作完成移位,第二种方法类似冒泡排序,通过循环逐个元素向前移位。代码示例使用C++实现,展示了不同算法的具体操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传入一个数组如 {1,2,3,4,5,6,7} 
将数组前面 head的一个子集移到数组末尾end
如input numberOfElements=3,则{1,2,3,4,5,6,7}=>{4,5,6,7,1,2,3} 
input numberOfElements=5,则{1,2,3,4,5,6,7}=>{6,7,1,2,3,4,5}  
如何写出该算法?

方法一:用前部分逆置,后部分逆置,整个数组逆置。

注意数组名作形参的时候,会退化为指针,所以用sizeof(a)/sizeof(a[0])是求不出数组长度的,

目前只知道直接传入数组长度的方法。

 

View Code
 1 #include<iostream>
2 using namespace std;
3
4 void reverse(int array[],int start,int end)
5 {
6 for(int i=start; i<(end+start+1)/2; i++) //注意这里的写法。。。
7 {
8 array[i]^=array[end+start-i];
9 array[end+start-i]^=array[i];
10 array[i]^=array[end+start-i];
11 }
12 }
13
14 void MoveSubArrayToTheEnd(int array[], int numberOfElements,int length)
15 {
16 reverse(array,0,numberOfElements-2);
17 reverse(array,numberOfElements-1,length);
18 reverse(array,0,length);
19 }
20
21
22 int main()
23 {
24
25 int b[]= {0,1,2,3,4,5,6,7};
26 MoveSubArrayToTheEnd(b,6,sizeof(b)/sizeof(b[0])-1);
27 for(int i=0; i<=6; i++)
28 cout<<b[i]<<",";
29 cout<<b[7]<<endl;
30
31 }

 

第二种方法参考冒泡排序,用循环移位实现。。。

 

View Code
 1 #include<iostream>
2 using namespace std;
3
4 void MoveSubArrayToTheEnd(int array[], int numberOfElements,int length)
5 {
6 for(int i=0;i<numberOfElements;i++)
7 {
8 for(int j=0;j<length-1;j++)
9 {
10 array[j]+=array[j+1];
11 array[j+1]=array[j]-array[j+1];
12 array[j]=array[j]-array[j+1];
13 }
14 }
15 }
16
17 int main()
18 {
19
20 int b[]= {0,1,2,3,4,5,6,7};
21 MoveSubArrayToTheEnd(b,6,sizeof(b)/sizeof(b[0]));
22
23 for(int i=0; i<=6; i++)
24 cout<<b[i]<<",";
25 cout<<b[7]<<endl;
26 return 0;
27 }




转载于:https://www.cnblogs.com/YipWingTim/archive/2011/11/05/2236775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值