2009-08-22

演算法──氣泡排序

  排序一直以來都是演算法(Algorithm)中很重要的課題,其中,最出名的莫過於氣泡排序了(Bubble Sort)!這是一種簡單、易懂的排序法。基本上,它就是一直比對、把大的交換到後面、把小的交換到前面(或相反),也因此,效率極差,時間複雜度為Θ(n2),試試看就知道,如果你要排序十億個數的話……吃個午飯再來看保證還跑不完。這也是一種穩定的排序,額外空間的使用是零,不過,沒有人會因此去用它排序大的陣列……廢話不多說,來實作卡實在:

template<class TYPE>
void bubble_sort(TYPE* array,unsigned int n){

while(n>0){
for(unsigned int pos=1;pos<n;pos+=1){
if(*(array+pos)<*(array+pos-1))
Swap(*(array+pos),*(array+pos-1));

}
n--;}
}


  如同理論,實作也是簡單易懂。其中,Swap是交換兩個數的函數,我是如此寫的:

template<class TYPE>
inline void Swap(TYPE& a,TYPE& b){
TYPE tmp=a;
a=b;
b=tmp;}


  顯而易見的,我用了參考或稱為指涉器(Reference)的引數(Argument),這是為了增加效率,但你也知道,這是行內函數,在行內函數看來,一切都無意義的。不過編譯器並不會真的乖乖的把它編譯成行內函數,事實上,你加了"inline"這幾個字對它來說只不過是「建議」而已。這個Swap函數我們以後還會用到,先記著吧。

參考資料:維基百科

發文者:竹中軟研24th教學

沒有留言: