C語言之冒泡排序

在學習c語言之初,我們會瞭解到很多基礎算法,又有趣又可以開拓腦筋,冒泡排序就是其中之一。

我首先將源代碼給出,大家可以運行一下然後看下文的講解

#include <stdio.h>
​
#define ARRNUM 5
​
int main()
{
  int nArrSort[ARRNUM] = {1,3,5,6,7};
  for(int i=0; i<ARRNUM; i++)//第一層循環
  {
    for(int j=0; j<ARRNUM-1-i; j++)//第二層循環
    {
      if(nArrSort[j] < nArrSort[j+1])//交換元素
      {
        int nExchange = nArrSort[j];
        nArrSort[j] = nArrSort[j+1];
        nArrSort[j+1] = nExchange;
      }
    }
  }
  printf("\r\n\t");
  for(int i=0; i<ARRNUM; i++)//輸出
  {
    printf("%d",nArrSort[i]);
    if(i != ARRNUM - 1)printf(",");
  }
  printf("\r\n");
}

冒泡排序就是從數組首個元素開始,讓相鄰的兩個元素進行比較,我們自己來規定交換邏輯,比如想降序排列,大一點的數就要往前移動,一直比較到最後兩個元素爲止。這裏面需要兩層for循環的嵌套,我們來舉個例子講解其細節之處!

比如我們想要下面的數組進行降序排列

int nArrSort[5] = {1,3,5,6,7};

首先我們要保證數組比較n次,n就是數組包含的元素數目,這樣才能保證每兩個相鄰的數都被比較到:

for(int i=0; i<5; i++)

然後我們要進行相鄰的兩個數的比較,我們的每次比較都可以把最小的數字放到最後,所以最後一個數字是沒必要再進入到比較的行列,並且我們要保證數組不越界,所以循環要比數組包含的元素數目少一個,這樣就構成了我們的第二層循環:

for(int j=0; j<5-1-i; j++)

下圖我將每次循環比較過後的數組順序輸出出來了,大家比較參照一下

在上圖中,第四次比較就已經出來結果!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章