數組倒序排列,數組倒置,C語言數組倒序算法詳解!


數組倒置就是將數組元素中的數據倒過來!

舉個例子,比如下面程序:

#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語言必讀書籍:


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM