冒泡排序

冒泡排序是從我學C數組的時候最大的頭疼點,那時候for的二層循環的概念沒有那麼成熟。如今對冒泡排序沒有那麼恐懼了,多練,多用,沒啥好怕的。算法

咱們固然能夠一口氣將這四個數字從小到大來排序,但計算機須要一個一個的去比。那麼怎麼比呢?就須要用到排序算法了,排序的算法不少,此次的文章主要介紹冒泡排序。數組

冒泡排序簡介:顧名思義,‘冒泡’,在水中的泡泡,輕的飄上去,重的沉在水裏。code

拿9 5 7 1 這四個數字做爲例子排序

第一輪:for循環

  1. 9 5 7 1循環

  2. 5 9 7 1遍歷

  3. 5 7 9 1程序

  4. 5 7 1 9
    第一輪比較下來,發現最大的數字跑到了最後面。在程序中能夠用一個for循環來遍歷這四個數字若是前一個比後一個大,則對其進行交換。數據

第二輪:計算機

  1. 5 7 1 9

  2. 5 1 7 9 (其實到這裏能夠不用比了)

  3. 5 1 7 9

  4. 5 1 7 9
    第二輪將7放到了9的前面。一樣的道理,先後比較大的放後面。

第三輪

  1. 5 1 7 9

  2. 1 5 7 9 (應中止比較)

  3. 1 5 7 9

  4. 1 5 7 9
    第三輪將5放在了7的前面

雖然有四個數字,但只需遍歷三次,由於其餘三個數字肯定放正確了,最後一個數字天然也就正確了。

#define N 4

int array[N] = { 9,5,7,1};
for (int i = 0; i < N-1; i++)
{
    for (int j = 0; j < N-1-i; j++)
    {
        if (array[j] > array[j + 1])
        {
            int temp = array[j];
            array[j] = array[j + 1 ];
            array[j + 1] = temp;
        }
    }
}

for (int i = 0; i < N; i++)
{
    printf("%d\n", array[i]);
}

關鍵點在於外層循環的N-1,上文已經解釋是由於其餘的位置已經肯定最後一個數字不須要管。內層循環,首先N-1,是由於不用與本身比,N-1-i ,這裏又減了一個i,緣由是外層每循環一次就能肯定一個數字,因此每次減去一次外層。再對其進行大小比較,交換數據。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息