排序演算法之氣泡排序

2021-10-12 17:10:45 字數 1429 閱讀 5236

氣泡排序的思路:冒泡簡單的說,槍打出頭鳥,誰最大,就出來排好,就像站隊一樣,把最高的拎出來站好後,第二高的再拎出來,最後依次排好。

舉個例子,有這麼乙個無序的陣列 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 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,...