陣列迴圈左移或右移(陣列翻轉)

2021-07-02 21:42:01 字數 880 閱讀 7853

一道程式設計題:陣列翻轉或者說是陣列迴圈移動。

例如有陣列a:1,2,3,4,5,迴圈左移動2位變成:3,4,5,1,2。

此題的解法很簡單也很巧妙,首先將陣列逆置 變為 5 4 3 2 1 ,然後將陣列分成兩個部分,5,4,3 & 2,1 然後分別繼續逆置兩個部分,即為所求:3 4 5 1 2。(迴圈左移2位,或迴圈右移3位)

根據這個思想編寫**,沒有什麼難點,不過為了優化**也花費了半個小時左右除錯。(後來發現錯了,沒有考慮移動步數大於陣列長度的情況!,漏了關鍵一句step = step%n)

首先是交換函式,運用指標可以改變實參的值:

void swap(int

*p1,int

*p2)

然後定義陣列逆置函式,可以根據起始位置逆置傳入陣列的一部分:

void reversearray(int a,int start,int end)

}

最後定義陣列迴圈左移函式:

void arrayleftmove(int a,int n,int

step)

如果迴圈移動的步數大於了陣列的長度就錯了。所以要加上那句判斷,處理這種情況!

以下是另一種方式,此為迴圈右移:

這是先分兩部分,前後部分各自逆置,然後再整體逆置!

void

reverse( int buffer, int start, int end )

}// 將含有n個元素的陣列buffer右移k位

void rightmovearray( int buffer, int n, int k )

整型陣列左移或右移位簡單操作

函式功能 將陣列元素迴圈左移或右移一位 輸入引數 輸入的陣列 input 輸入陣列的長度 shiftn 取值為 1 或 1 1 表示右移,1表示左移 void shift int input,int n,int shiftn if shiftn 0 int tmain int argc,tchar ...

陣列迴圈左移

本題要求實現乙個對陣列進行迴圈左移的簡單函式 乙個陣列 a中存有 n 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移 m 個位置,即將 a中的資料由 a 0 a 1 a n 1 變換為 a m a n 1 a 0 a 1 a m 1 最前面的 m個數迴圈移至最後面的 m個位置 如果還需要...

陣列迴圈左移

a中存有n 0 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移m 0 個位置,即將 a中的資料由 a 0 a 1 a n 1 變換為 a m a n 1 a 0 a 1 a m 1 最前面的 m個數迴圈移至最後面的 m個位置 如果還需要考慮程式移動資料的次數盡量少,要如何設計移動的方法?...