面試必備 經典演算法動畫解析之氣泡排序

2022-08-24 02:03:09 字數 1300 閱讀 3120

哈嘍,我是程式設計師大鵬

最近在招聘過程中,發現好多小夥伴最基礎的一些演算法回答,接下來會做乙個系列,把基礎的排序等演算法採用動畫的形式做解析。

這是第一篇氣泡排序

氣泡排序(bubble sort)是一種交換排序,基本思想是兩兩比較相鄰記錄,如果逆序則進行交換,直到沒有逆序的記錄為止

冒泡演算法有很多種實現方式,我們在這裡只列舉出來兩種實現方式來講解氣泡排序。

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

簡單的氣泡排序

public static void sort(int arg) }}

}

上面的**是根據動畫進行的實現,假設我們的資料為,當i=0時,進行第一輪排序,變數j由5開始一直迴圈到1,逐個進行兩兩相鄰數字的比較,最後將數字最小的1排到第一位,當i=1時,進行第二輪排序,變數j由5開始一直迴圈到2,逐個進行兩兩相鄰數字的比較,最後將數字2排到第二位,依次進行i的下一輪比較,最終實現了資料的排序。

在這個過程中,由於數字像是浮起來的泡泡,所以稱之為氣泡排序。

上面的演算法還有優化的空間嗎?我們來看下面的這組資料,比如,經過一輪排序已經變為了,第二輪開始排序之後,還是,數字的順序是沒有改變的,說明數字已經處於排序的狀態了,則沒有必要進行排序,所以還可以進行優化,**如下:

public void sort(int arg) 

}if (issorted) }}

這樣經過上面的優化,氣泡排序會避免在資料已經有序的情況下繼續進行資料迴圈比較,效能得到了一定的提公升。

比如資料為,按照優化後的演算法,只需要,只會進行5次比較,也就是n-1次的比較,所以時間複雜度為o

最壞的情況就是全部資料都是逆序,比如,(n(n-1))/2次的資料操作和資料移動,所以總的時間複雜度為(o(n2))

綜合上面的情況,氣泡排序的時間複雜度為(o(n2))

面試必備 經典演算法動畫解析之插入排序

哈嘍,我是程式設計師大鵬。前面我們介紹了氣泡排序和選擇排序,今天我們來看一下簡單排序中的插入排序。打過撲克的都知道,在抓牌的時候,我們不會等抓完所有的牌再用冒泡或者選擇排序再理牌。一般是拿到一張牌就放到手裡,抓到第二張牌的時候,再跟手裡面已經有的牌進行比較,插到合適的位置,然後抓第三張牌,再與手裡面...

經典演算法之冒泡演算法

前言 冒泡演算法是一種經典的排序演算法,在大學起初學習c語言的時候,冒泡演算法是筆者接觸程式設計的第乙個演算法。冒泡,顧名思義就是輕 小 的往上冒,重 大 的往下沉,也稱雞尾酒演算法。演算法解析首先我們需要確立兩層巢狀for迴圈,第一層for迴圈主要控制總體迴圈的趟數,第二層for迴圈主要是比對相鄰...

經典演算法之氣泡排序

author s email wardseptember gmail.com date 2017.12.4 氣泡排序 氣泡排序是通過一系列的 交換 動作完成的。首先第乙個關鍵字和第二個關鍵字比較,如果第乙個大,則二者交換,否則不交換 然後第二個關鍵字和第三個關鍵字比較,如果第二個大,則二者交換,否則...