是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。走訪數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。這個算法的名字由來是由於越小的元素會經由交換慢慢「浮」到數列的頂端。ios
冒泡排序對個項目須要O(
)的比較次數,且能夠原地排序。儘管這個算法是最簡單瞭解和實做的排序算法之一,但它對於少數元素以外的數列排序是很沒有效率的。算法
冒泡排序是與插入排序擁有相等的執行時間,可是兩種法在須要的交換次數卻很大地不一樣。在最壞的狀況,冒泡排序須要次交換,而插入排序只要最多
交換。冒泡排序的實現(相似下面)一般會對已經排序好的數列拙劣地執行(
),而插入排序在這個例子只須要
個運算。所以不少現代的算法教科書避免使用冒泡排序,而用插入排序取代之。冒泡排序若是能在內部循環第一次執行時,使用一個旗標來表示有無須要交換的可能,也有可能把最好的複雜度下降到
。在這個狀況,在已經排序好的數列就無交換的須要。若在每次走訪數列時,把走訪順序和比較大小反過來,也能夠稍微地改進效率。有時候稱爲往返排序,由於算法會從數列的一端到另外一端之間穿梭往返。spa
冒泡排序算法的運做以下:設計
因爲它的簡潔,冒泡排序一般被用來對於程式設計入門的學生介紹算法的概念。code
#include<iostream> using namespace std; int data[10]={8,9,4,6,2,1,4,6,8,0}; int myBubbleSort(int ds[],int length){ for(int i=length-1;i>0;i--) for(int j=0;j<=i;j++) if(ds[j-1]>ds[j]){ int temp=ds[j-1]; ds[j-1]=ds[j]; ds[j]=temp; } return 0; } int main(){ myBubbleSort(data,10); for(int i=0;i<10;i++) cout<<data[i]<<endl; getchar(); return 0; }