最容易理解的冒泡排序

所謂冒泡就是像水中泡泡一樣,一直浮到水面;

在這裏插入圖片描述

可以看出每一個新泡泡從底部產生一路浮到水面

冒泡排序也是一樣比如下面用冒泡排序排列一個數組

#include<iostream>
using namespace std;
int main()
{int i,t,j;
 int a[10]={1,9,4,5,8,3,10,11,2,91};
for(j=0;j<9;j++)              //循環次數n-1;最後兩個數不用比較
for(i=0;i<9-j;i++)            //i<無序序列的倒數第一個元素
 if(a[i]>a[i+1])              //如果a[i]大於後一個數
    { t=a[i];
     a[i]=a[i+1];
     a[i+1]=t;                //原a[i]數值下沉
    }
 
for(i=0;i<10;i++)             //輸出冒泡之後的值
  cout<<a[i]<<" ";
  }  

運行結果
在這裏插入圖片描述

大數下沉小數上浮

當j=0;第一次循環
i=0 a[0]=1,a[1]=9 ; 此時9-j=9(無序序列)循環9次可到達無序最底層
i循環如下

在這裏插入圖片描述

經過j=0的循環最大的數已經到了最底下,
再循環時j=1; 此時 9-j=8(無序序列)循環8次到達無序最底層
i循環如下;
在這裏插入圖片描述

黑色爲有序不能動

當j=2 ;此時9-j=7(無序序列)循環7次到達無序最底層
i循環如下;
在這裏插入圖片描述

黑色爲有序不能動

之後的循環省去

由上面可以看出j每循環一次都會把最大值放在無序最底層;

所以j就可以表示序列中有序的個數,開始爲零
總共10個數當運行到第9次開始前要排列的無序僅有兩個數;一旦完成第九次無序就僅有一個,也就不必再循環;故j要循環9次;

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