演算法筆記 氣泡排序 插入排序 選擇排序

2022-07-02 19:00:15 字數 2122 閱讀 7126

氣泡排序、插入排序、選擇排序、歸併排序、快速排序、計數排序、基數排序、桶排序。

對於排序演算法執行效率的分析,我們一般會從這幾個方面來衡量:

1. 最好情況、最壞情況、平均情況時間複雜度

2. 時間複雜度的係數、常數 、低階

3. 比較次數和交換(或移動)次數

氣泡排序(bubble sort)

氣泡排序只會操作相鄰的兩個資料。每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關係要求。如果不滿足就讓它倆互換。一次冒泡會讓至少乙個元素移動到它應該在的位置,重複 n 次,就完成了 n 個資料的排序工作。

q:第一,氣泡排序是原地排序演算法嗎?

a:冒泡的過程只涉及相鄰資料的交換操作,只需要常量級的臨時空間,所以它的空間複雜度為o(1),是乙個原地排序演算法。

q:第二,氣泡排序是穩定的排序演算法嗎?

a:在氣泡排序中,只有交換才可以改變兩個元素的前後順序。為了保證氣泡排序演算法的穩定性,當有相鄰的兩個元素大小相等的時候,我們不做交換,相同大小的資料在排序前後不會改變順序,所以氣泡排序是穩定的排序演算法。

q:第三,氣泡排序的時間複雜度是多少?

最好情況下,要排序的資料已經是有序的了,我們只需要進行一次冒泡操作,就可以結束了,所以最好情況時間複雜度是 o(n)。而最壞的情況是,要排序的資料剛好是倒序排列的,我們需要進行 n 次冒泡操作,所以最壞情況時間複雜度為 o(n²)。

插入排序(insertion sort)

我們將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,並保證已排序區間資料一直有序。重複這個過程,直到未排序區間中元素為空,演算法結束。

選擇排序(selection sort)

選擇排序演算法的實現思路有點類似插入排序,也分已排序區間和未排序區間。但是選擇排序每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾。

選擇排序空間複雜度為 o(1),是一種原地排序演算法。選擇排序的最好情況時間複雜度、最壞情況和平均情況時間複雜度都為o(n²)。選擇排序是一種不穩定的排序演算法。

氣泡排序和插入排序的時間複雜度都是 o(n²),都是原地排序演算法,為什麼插入排序要比氣泡排序更受歡迎呢?從**實現上來看,氣泡排序的資料交換要比插入排序的資料移動要複雜,氣泡排序需要3 個賦值操作,而插入排序只需要 1 個。

//氣泡排序

function bubblesort(&$arr)

}}}//

插入排序

function insertsort(&$arr)

//插入(這時就給$insertval找到適當位置)

$arr[$insertindex + 1] =$insertval;

}}//

選擇排序

function selectsort(&$arr)

}//最後交換

$temp =$arr[$i];

$arr[$i] =$arr[$minindex];

$arr[$minindex] =$temp;

}}$arr1 = $arr2 = $arr3 = [1, 4, 6, 2, 3, 5, 4

];bubblesort($arr1);

print_r($arr1);

insertsort($arr2);

print_r($arr2);

selectsort($arr3);

print_r($arr3);

演算法筆記 氣泡排序,選擇排序,插入排序

若乙個陣列儲存n個元素,則要進行n 1趟排序,且每進行一次排序,最大 小 的數都會出現在右邊。include using namespace std intmain for int i 1 i 4 i n 1次排序 for int j 0 j 5 i j if a j a j 1 for int i...

Java排序演算法之氣泡排序 插入排序 選擇排序

一 前言 排序是日常中最常見的一種演算法,常見的演算法有 氣泡排序 插入排序 選擇排序 歸併排序 快速排序 計數排序 快速排序 基數排序 桶排序。那麼該怎樣分析和學習排序演算法呢?二 演算法的分析課 在上述的八種排序方法中,根據時間複雜度和是否基於比較可以為三種 排序演算法 時間複雜度 是否基於比較...

排序演算法 冒泡 選擇 插入排序

本文簡單總結一下三大排序演算法,如有不足,請多多提意見。簡述 從小到大排序,每次比較兩個元素,看他們的順序有沒有錯,如果錯了就換過來。a 比較abc.元素,如果第乙個比第二個大,則將兩個元素交換位置 bac.再依次將a和c進行比較。b 對每一對相鄰的元素做同樣的工作,從第一對到最後一對。這一次執行完...