我根本无法理解为什么以下代码不起作用。 交换操作不起作用的可能原因是什么;
#include <iostream>
using namespace std;
void rotateK(int* arr, int start, int finish) {
int temp;
for(int i=0;i<=finish;i++) {
temp=arr[i];
arr[i]=arr[finish-i];
arr[finish-i]=temp;
}
for(int i=0;i<=finish;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
int main(){
int arr[5]={1,2,3,4,5};
rotateK(arr,0,4);
return 0;
}
答案 0 :(得分:9)
它确实有效(尽管不是你希望它如何工作)。但是交换元素两次,这就是处理后的数组与原始数组相同的原因。
你可能想要:
for(int i=0 ; i<=finish/2 ; i++)
甚至
for(int i=start;i<=(finish-start)/2 + start;i++)
以便您实际使用start
。
答案 1 :(得分:3)
你要交换两次元素。你可以考虑这种翻转数组片段的想法。
int i = start;
int j = finish;
while( i < j ) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
++i; --j;
}
如果你这样写,就很难犯错误。