氣泡排序的思路:冒泡簡單的說,槍打出頭鳥,誰最大,就出來排好,就像站隊一樣,把最高的拎出來站好後,第二高的再拎出來,最後依次排好。
舉個例子,有這麼乙個無序的陣列 int arry[10]=;
氣泡排序會這樣做:
第一輪:從arry[0]開始,依次進行比較,誰大就冒出來,比較arr[i]與arr[j+1],如果arr[i]>arr[j+1]則就交換,然後繼續往後比,直到最後。
第二輪:由於第一輪已經把最大的冒出了,然後再將剩下的元素重複一輪。
依次類推,可以得出排序好的陣列。
示例:
int testarray[10] = ;
void testmaopao(int _arry,int _nlength)
for (int i=0;i<_nlength>
} }}
int main()
那既然我們得出了氣泡排序的**。那還有沒有優化的地方呢?我們來想一想
第一次優化:
那麼**就變成為如下:
int testarray[10] = ;
void testmaopao(int _arry,int _nlength)
for (int i=0;i<_nlength>
}if (bflag)
}int mm = 0;
}int main()
第二次優化:
按照這種思想,看看**:
int testarray[10] =
void testmaopao(int _arry,int _nlength)
} arrboundary = lastswapindex;//將最後一次交換的位置賦值給邊界,後面是有序的,不需要去迴圈了
if (bflag)}}
說完了**,我們再來看看時間複雜度:
氣泡排序最壞的情況是:資料是徹底逆序的,每一輪每一步都得交換,比如 ,這是最壞的情況,則這種時間複雜度為o(n的平方)。
最好的情況是:資料不需要排序,則按照優化的**來看,flag從第一輪就為true,則直接退出,時間複雜度為o(n);
那這種排序是不是穩定的呢?
穩定的定義:如果在排序之前,a在b的前面,同時a=b,排序之後a依然在b的前面。
我們來看看:
因為交換的條件是a【j】>a[j+1],那麼如果a=b,則永遠不會發生交換,a和b的順序一致不變。
那麼氣泡排序是一種穩定的排序。
排序演算法之氣泡排序
參考 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。若...
排序演算法之氣泡排序
對於大多數學計算機的人來說,氣泡排序應該都是接觸的第一種排序方式,氣泡排序的排序思想是比較簡單的,它的演算法的是 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了...
排序演算法之氣泡排序
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,...