所謂冒泡就是像水中泡泡一樣,一直浮到水面;
可以看出每一個新泡泡從底部產生一路浮到水面
冒泡排序也是一樣比如下面用冒泡排序排列一個數組
#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次;