判斷大小簡單演算法 十大排序演算法(一)氣泡排序

2021-10-11 18:30:34 字數 1974 閱讀 4873

眾所周知,十大排序演算法是我們必須掌握的演算法。這裡我先把十個演算法的名稱列一下:

因為我想建立乙個比較完整的知識體系,所以對於比較簡單基礎的知識我也會寫。對於已經學會的小夥伴就當做回顧一下吧。

話不多說,直接開始。今天整理了一下比較簡單的氣泡排序。

在介紹演算法之前,先簡單解釋幾個概念:

氣泡排序是乙個比較經典的排序演算法。我先用文字解釋一下演算法的過程,然後結合乙個具體的例項來加深理解,最後給出了演算法**。

對於一組包含n個資料的陣列,氣泡排序在最壞情況下要進行n趟排序(也可以說是n-1趟,因為最後一次遍歷可以省略):

第一趟:依次比較下標為0和1、1和2、2和3,n-2和n-1的元素,如果第乙個元素大於第二個元素,則交換它們,否則不交換。經過一次遍歷後,最大的元素排到了最後;

第二趟:依次比較下標為0和1、1和2、2和3,n-3和n-2的元素,如果第乙個元素大於第二個元素,則交換它們,否則不交換。經過第二次遍歷後,第二大的元素排到了倒數第二個位置;

第n-1趟:比較下標為0和1的元素,如果第乙個元素大於第二個元素,則交換它們,否則不交換。經過第n-1次遍歷後,第二小的元素排到了第二個位置;

第n趟:此時下標為0的元素就是最小元素,排序結束。

直接講解演算法的過程比較抽象,我打算結合乙個具體的例項來講解。

假設有乙個陣列arr=

第一步:首先把第乙個元素和第二個元素比較,如果第乙個比第二個大,就交換兩個數的位置。arr[0]=6,arr[1]=2,6>2,故交換兩個數的位置;

接著將第二個數和第三個數比較,如果第二個數大於第三個,則交換它們的位置;6>4,交換位置;

接著比較6和8,6<8,不用交換位置,接下來比較8和3,8>3,交換位置。這樣,就完成了一次遍歷;

接下來開始第二次遍歷,過程和第一次相同,唯一區別就是最後乙個元素8不再參與比較。2<4,4<6,不用交換位置,接著6>3,交換位置,第二次遍歷結束。結果如下:

這樣,元素6就放在了正確位置。

接下來遍歷2-4-3,將元素4放在了正確位置;

接下來遍歷2-3,將元素3放在了正確位置;

接下來只剩下1個元素2,自然就是有序的。

時間複雜度:o(n*n)

空間複雜度:o(1)

是否是穩定排序:是

在遍歷過程中,如果陣列已經是有序的,則剩下的遍歷過程可以省略,這樣可以節省時間。

例如在上面的例子中,第3次遍歷之後,陣列已經是有序的,則可以省略後兩次的遍歷。

優化方法就是判斷在某一次遍歷中是否有資料進行交換,若沒有則表明排序已經完成。為此,可以定義乙個標誌變數,用來判斷一次遍歷過程是否有資料交換。

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...

十大排序演算法

github 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序...