簡體   English   中英

在 c++ 中取一個整數數組 (arr[])、它的長度 (N) 和要右移的元素數 (M):?

[英]In c++ take an integer array (arr[]), its length (N), and the number of elements to right-shift (M):?

我怎樣才能完成我的代碼來獲取一個整數數組 (arr[])、它的長度 (N) 和右移的元素數 (M)。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

void shiftright (int myarray[], int size);

int main (void)
{
    int myarray [] = {1, 2, 3, 4, 5};
    shiftright( myarray, 5);

    for ( int i = 0; i < 5; i++)
    {
        cout << myarray[i] << ' ';
    }

    return (0);
}

void shiftright (int myarray[], int size, int M)
{
    for (int m = (size - 1); m >= 1; m--) {
        int temp = myarray[size - 1];

        for (int i = (size - 1); i >= 1; i--)
        {
            myarray[i] = myarray[i - 1] ;
        }
        myarray[0] = temp;
    }
}

無需自行滾動,只需使用標准算法即可。

  if (m > 0 && size > 0)
      std::rotate(myarray, myarray + m % size, myarray + size);

看起來您正在嘗試執行“旋轉”操作。 您是否考慮過創建一個帶有偏移量的索引器而實際上根本不需要旋轉任何東西? (這成本要低得多。)

無論如何,只需刪除您的外循環即可移動一次:

void shiftright (int myarray[], int size)
{
    int temp = myarray[size - 1];

    for (int i = (size - 1); i >= 1; i--)
    {
        myarray[i] = myarray[i - 1];
    }

    myarray[0] = temp;
}

現在,您可以創建另一種方法來移動m次:

void shiftright (int myarray[], int size, int m)
{
    for (int i = 0; i < m; i++)
    {
        shiftright(myarray, size);
    }
}

就性能而言,這顯然是非常昂貴的,因此您可能想解釋一下您需要它做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM