氣泡排序 排序 氣泡排序

2021-10-16 04:22:04 字數 1312 閱讀 9594

既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。

交換排序的基本思想: exchange until sorted

順序,分支,迴圈
(注意偽**的熟悉

下面介紹兩種交換演算法

首先進行聯想,用乙個圖進行輔助聯想:

水冒泡過程

頂部是陣列的begin,底部理解為陣列end。氣泡排序的過程就是最下面的水滴往上冒泡的過程,最後最小的氣泡在最上面,最大的氣泡在最底下。(重力

我們把整個過程進行抽象和精煉下出如下氣泡排序的演算法思路:

1. 氣泡排序從低往上進行exchange,根據空間的連續性(滑稽,首先進行比較的是這個泡泡最接近的上面的泡泡,將某個泡泡送到他最終的位置(因此氣泡排序具有全域性有序 )

2.兩個氣泡相互交換,小的氣泡(權值小的)繼續進行冒泡的過程直到到達了規定位置

for(從0開始到陣列末端-1(最後就乙個數字,選擇每次冒泡的終點位置)}}

下面可以進行兩個練習:

寫出 氣泡排序演算法的完全**

分析氣泡排序過程中的冗餘過程,考慮如何進行優化(tip:及時中斷)

bubble sort 演算法分析

ps:對於已經優化的排序演算法進行分析

陣列已經為正序,一遍掃瞄就好了,進行n-1次比較,不需要移動故:

所以bubble sort 的最好時間複雜度是

陣列為逆序,進行n - 1 次排序,每次排序需要進行

次排序,每次排序進行3次元素的移動(swap)故:

所以bubble sort 的最壞時間複雜度是

氣泡排序的平均情況分析較為複雜,但是可以知道平均的排序趟數仍為

,所以平均比較次數仍為

,所以易知平均時間複雜度為

。氣泡排序的平均時間複雜度比直接排序相對壞一些。

當然 i > j 且陣列r[i] = r[j]時,由於他們之間沒有逆序,所以不會進行交換,所以氣泡排序是穩定的排序演算法。

前面思考題的答案,注釋的是第二問的優化

void bubble_sort(int a, int n)

}//if(!exchange)return;}}

talk is easy, show me the code. xd

氣泡排序 氣泡排序法

冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...

選擇排序,氣泡排序,雙向氣泡排序

氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...

選擇排序,氣泡排序,雙向氣泡排序

首先是選擇排序,原理 1 找到未排序的數中最小的數放到最前面 2 陣列後移一位 3 重複上面兩部。void selectsorting if min a i swap b i b t 這個應該是我第乙個接觸到的排序演算法,結果第一次打排序水題直接上冒泡,直接接了一發tle 才知道有nlogn的演算法...