這個算法的名字由來是由於越小的元素會經由交換慢慢「浮」到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端同樣,故名「冒泡排序」。ios
初始狀態:3 6 4 2 11 10 5c++
第一趟排序:3 4 2 6 10 5 11 (11沉到未排序序列)算法
第二趟排序:3 2 4 6 5 10 11 (10沉到未排序序列)數組
第三趟排序:2 3 4 5 6 10 11 (6沉到未排序序列)優化
第四趟排序:2 3 4 5 6 10 11 (5沉到未排序序列)spa
第五趟排序:2 3 4 5 6 10 11 (4沉到未排序序列)code
第六趟排序:2 3 4 5 6 10 11 (3沉到未排序序列)排序
#include <iostream> using namespace std; int main() { int a[7]={3,6,4,2,11,10,5}; int i,j,t; for(i=0;i<7;i++)//外層循環:要比較的次數 { for(j=0;j<6-i;j++)//內層循環:每次比較時,要比較的元素的範圍;(這裏就至關於j<n-i-1 ) { if(a[j]>a[j+1])//交換的三條語句 { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=0;i<7;i++) cout<<a[i]<<' '; return 0; }
定義一個flag,用來判斷有沒有進行交換,若是在某次內層循環中沒有交換操做,就說明此時數組已是有序了的,不用再進行判斷,這樣能夠節省時間。io
#include <iostream> using namespace std; int main() { int a[7]={3,6,4,2,11,10,5}; int flag=1; int i,j,t; for(i=0;i<7 && flag;i++)//外層循環:要比較的次數 { flag=0; for(j=0;j<6-i;j++)//內層循環:每次比較時,要比較的元素的範圍;(這裏就至關於j<n-i-1 ) { if(a[j]>a[j+1])//交換的三條語句 { t=a[j]; a[j]=a[j+1]; a[j+1]=t; flag=1; } } } for(i=0;i<7;i++) cout<<a[i]<<' '; return 0; }