在學習了陣列順序排序後碰到需要將陣列內的元素排序顛倒過來的練習,雖然思路比較簡單,不過通過左右夾逼的方法還是挺常用的,在此作為排序拓展記錄。
先給自己出道題目,將中的元素逆置,即
這樣我們需要先知道陣列長度以提取下標進行操作,可以通過
sizeof(arr)/sizeof(arrtype)
來獲取陣列的長度。
再觀察可知道這是通過先將陣列第0位與陣列最後一位通過下標進行值交換,再將第0+1位與陣列最後一位-1位進行值交換的迴圈過程,即將陣列第n位與陣列長度-1-n位進行值交換。那麼有了思路我們就可以開始寫**了。
先定義乙個不定長度的陣列存放我們的元素,再根據我們的思路獲取陣列的長度
int arr=;
int lena = sizeof(arr)/sizeof(int);
接下來寫迴圈,由於當左邊值下標i遞增時,右邊值也會跟著減小,當左邊值小於右邊值時執行迴圈,
我在第一次寫時寫為當左邊值下標小於陣列長度/2時進入迴圈,即
for (int i = 0; i< lena / 2; i++) {}
這樣做的弊端在於如果編譯器進行四捨五入就會多執行一次,不過vs編譯器是直接截斷所以我還是用了。
這樣就獲取到了第n輪的輪換值的下標了,左邊值下標為i,右邊值下標為lena-i-1,就剩下值交換的過程了,而c++要通過第三方進行值交換,我個人又不喜歡在for裡面宣告臨時變數,所以就有了下面的**
int arr = ;
int lena =sizeof(arr) / sizeof(int);
int z;
for (int i = 0;i < lena / 2; i++)
不過這樣的寫法我發現並不能體現夾逼的思想,於是我們需要進行小改動
首先是for迴圈條件,既然是夾逼那下標就會逐步縮小範圍,當左邊值下標小於右邊值下標時執行迴圈,即
for (int i = 0;i < lena; i++) {}
改了迴圈條件後迴圈體也要改一改,在裡面加上右邊值下標的遞減過程;
lena - -;
改完後就變得直觀了許多:
int lena =sizeof(arr) / sizeof(int)-1;
int z = 0;
for (int i = 0;i < lena; i++)
結果也是肯定的
所以思路還是相當重要的,理應先於**。
陣列元素原地逆置
最簡單的利用陣列實現 includeusing namespace std const int arraysize 30 int main for int i 0 i 用結構體實現 include includeusing namespace std define listsize 30 函式狀態碼...
c 實現陣列元素逆置 7
在c 利用迴圈巢狀的方法實現 陣列元素逆置 並且用for迴圈對其進行列印 易錯點 在進行陣列元素互換時,先將被置換元素放到空變數裡面放置元素覆蓋。include using namespace std intmain int argc,const char ar int m 0,n 0 for in...
C 實現元素逆置
include using namespace std intmain 最後輸出為 分析 1.建立陣列 2.實現逆置 3.列印輸出逆置後的陣列 1.建立陣列以及輸出逆置前的陣列 int arr cout 逆置前的陣列為 int i 0 i 5 i cout 1 定義乙個變數,記錄起始下標的位置 2 ...