【问题标题】:C++: A Basic Array SwapC++:基本数组交换
【发布时间】:2012-06-22 13:16:00
【问题描述】:

我简直无法理解为什么下面的代码不起作用。 swap 操作不起作用的可能原因是什么;

#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;

}

【问题讨论】:

    标签: c++ arrays algorithm swap


    【解决方案1】:

    它确实有效(尽管不是您希望它的工作方式)。但是交换元素两次,这就是处理后的数组与原始数组相同的原因。

    你可能想要:

    for(int i=0 ; i<=finish/2 ; i++)
    

    甚至

    for(int i=start;i<=(finish-start)/2 + start;i++)
    

    以便您实际使用start

    【讨论】:

    • 也许i &lt;= (finish-start)/2 ?
    • @ArmenTsirunyan 是的,甚至更好。 :D
    • @Armen 其实i &lt; (finish - start) / 2 + start ...
    【解决方案2】:

    你交换了两次元素。您可以考虑翻转数组的一部分的这种想法。

    int i = start;
    int j = finish;
    while( i < j ) {
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
        ++i; --j;
    }
    

    这样写很难出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多