數組倒置就是將數組元素中的數據倒過來!
舉個例子,比如下面程序:
#include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; int b[5]; //用來存放倒置后的數據 int i, j; for (i=0, j=4; i<5, j>=0; ++i, --j) { b[i] = a[j]; printf("%d\n", b[i]); } return 0; }
----------------------
輸出結果是:
5
4
3
2
1
----------------------
此程序中,for 循環括號中的寫法是正確的。之前講過,for 循環的格式為:
for (表達式1;表達式2;表達式3)
這只是一般的形式。以表達式 1 為例,它是一個“整體”,它可以是一個表達式,也可以是多個表達式,如果是多個表達式就用逗號隔開,如程序中那樣。但是如果表達式間用分號隔開就不能看成一個“整體”,即只能看成一個表達式了,如上面的“表達式 1;表達式 2;表達式 3”。
但是上面這個程序還不能稱得上完美。程序中,完成相同功能執行的步數越少,算法就越好,效率也就越高。上面這個算法是完全的“復制”,數組有幾個元素就執行多少次。其實有更好的算法,只需要上面算法執行步數的一半就能完成任務,即互換思想。
要完成倒置的功能,只需要第一個元素和最后一個元素交換、第二個元素和倒數第二個元素交換、第三個元素和倒數第三個元素交換……不管數組元素的個數是奇數還是偶數,這個算法都是成立的。如果是偶數那么每個元素都有機會交換;如果是奇數,那么最中間的那個元素就不交換。
----------------------
下面將數組加長,再將這種算法的程序給大家寫一下:
#include <stdio.h> int main(void) { int a[23] = {1,5,66,8,55,9,1,32,5,65,4,8,5,15,64,156,1564,15,1,8,9,7,215}; int i = 0; //循環變量1, i的值為數組第一個元素的下標 int j = 22; //循環變量2, j的值為數組最后一個元素的下標 int buf; //互換時的中間存儲變量 for (; i<j; ++i, --j) /*因為i和j已經初始化過了, 所以表達式1可以省略, 但表達式1后面的分號不能省。*/ { buf = a[i]; a[i] = a[j]; a[j] = buf; } for (i=0; i<23; ++i) { printf("%d\x20", a[i]); //\x20表示空格 } printf("\n"); return 0; }
----------------------
輸出結果是:
215 7 9 8 1 15 1564 156 64 15 5 8 4 65 5 32 1 9 55 8 66 5 1
----------------------

如果你還想更深入的學習以及其他知識,不管你是轉行也好,初學也罷,進階也可~
【值得關注】我的 編程學習交流俱樂部 !【點擊進入】
C語言入門資料:

C語言必讀書籍:
