三種排序演算法(氣泡排序,選擇排序,插入排序)

2021-09-12 13:34:52 字數 993 閱讀 9865

1.氣泡排序

流程:在乙個陣列中,第1個數與第2個數比,第2個數與第3個數比,第3數與第4個數比,若前面比後面大,則將兩個位置的數互換。因此,每次會將最大值推向最右邊,即座標索引為n-1處。當n-1處的元素敲定後,則繼續從0位置處推,推至n-2處,如此反覆。n+n-1+n-2......,時間複雜度為o(n2)

2.選擇排序

選擇排序,先將維度為n的陣列中的最小值遍歷找到,放置索引為0處,再從接下來的n-1個元素中找到最小值放至索引為1處,如此往復,o(n2)

3.插入排序

在工程中選擇排序與氣泡排序已經用得很少了,因為時間複雜度比較高啊。因此,則需要引入乙個時間複雜度有所提高的演算法,即插入排序演算法,而且這一演算法又另外引出了新的概念,即此種排序演算法的時間複雜度與樣本情況有關。

插入排序的演算法流程為,先將第二個元素與第乙個元素比,如果第二個元素小於第乙個元素則互換。接著來到第三個元素,判斷第三個元素與第二個元素的大小,如果小於第二個元素則互換,繼續比較,如果小於第乙個元素繼續互換,否則終止,比較第四個元素。

這樣的排序方式類似於打撲克中的配牌,假設你現在有一手牌,任意花色的張牌,分別是3、4、5、6、7、8、9、10、j,然而此時是亂序的,即8、9、7、4、3、6、5、j、10。面對這樣一手牌,從左至右,依次將後牌與前牌相比較,並在後牌大於前排時停止比較與交換。

關鍵**實現:

for(int i=1;ifor(j=i-1;j>=0&&arr[j]>arr[j+1];j--)

swap(arr[j],arr[j+1]);

插入排序的時間複雜度:與樣本情況有關,若樣本增序排列,則時間複雜度為o(n),則每乙個數隻會與前數比較一次,並且不會發生交換,因此時間複雜度為o(n);若樣本減序,則每乙個位置處的元素需要比較及交換的操作為遞減序列,根據等差序列求和公式,其時間複雜度為o(n2);根據複雜度分析的原則,取乙個演算法時間複雜度的最壞情況,即o(n2)。

常見的三種排序演算法 氣泡排序,快速排序,選擇排序

1.氣泡排序 特點 效率低,實現簡單 思想 每一趟將待排序序列中最大元素移到最後,剩下的為新的待排序序列,重上述步驟直到排完所有元素。這只是氣泡排序的一種,當然也可以從後往前排.氣泡排序 public class gugotest for int i 0 i arrays.length 1 i fo...

冒泡 選擇 插入三種排序

工作閒下來了,偶來學習下排序演算法的思想,適當的緩解下壓力,換個思考方式也很不錯的。氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為...

三種常用排序演算法(冒泡 選擇 插入)

演算法描述 從陣列的首端 尾端 開始,將相鄰兩數進行比較,將最大 最小 的數放置到尾端 首端 如此迴圈,並在下次迴圈時剔除上次尾端 首端 已放置好的數,直至排出正確序列。下面展示一些c 實現。演算法描述 從第二個數開始往右迴圈,每次迴圈中將當前數分別與其左邊的數進行比較,如發現比當前數大的數則進行交...