基礎排序(選擇 插入 冒泡)

2021-08-28 02:54:42 字數 2397 閱讀 7325

一、選擇排序

1. 最初版本

2. 優化

二、插入排序

三、氣泡排序

1. 最初版本

2. 優化

四、實驗對比

綜合對比:

排序演算法

時間複雜度(一般情況下)

最壞情況下

最好情況下

空間複雜度

穩定性選擇排序

o(n^2)

o(n^2)

o(n^2)

o(1)

不穩定插入排序

o(n^2)

o(n^2)

o(n)

o(1)

穩定氣泡排序

o(n^2)

o(n^2)

o(n)

o(1)

穩定選擇排序概況:

時間複雜度:

最好情況下 o(n^2)

最壞情況下 o(n^2)

空間複雜度:

o(1)

穩定性:

不穩定

每次遍歷都選出當前最小值,放入到相應的位置。

public

static

void

sort(comparable arr)

}swap(arr, i, minidx);

}}

優化:

public

static

void

sort(comparable arr)

for (int i = left; i < right; ++i)

else

if (arr[i].compareto(arr[maxidx]) > 0)

}swap(arr, left, minidx);

swap(arr, right, maxidx);

}}

插入排序概況:

時間複雜度:

最好情況下 o(n)

最壞情況下 o(n^2)

空間複雜度:

o(1)

穩定性:

穩定

思路就是類似平時撲克排整理,一張一張往已排序的序列中插入。

public

static

void

sort(comparable arr)

arr[j + 1] = e;

}}

氣泡排序概況:

時間複雜度:

最好情況下 o(n)

最壞情況下 o(n^2)

空間複雜度:

o(1)

穩定性:

穩定(ps:當冒泡判定條件為 >= 的時候為不穩定)

從左往右冒泡,若沒有冒泡交換,則終止。

public

static

void

sort(comparable arr)

}if (isswap == false)

}}

優化:

public

static

void

sort(comparable arr)

}if (lastswapidx == lastswapidxtmp)

}}

test for random array, size = 20000, random range [0, 20000]

selectionsort : 417 ms

selectionsort2 : 373 ms

insertionsort : 491 ms

bubblesort : 1899 ms

bubblesort2 : 1727 ms

test for ordered random array, size = 20000, random range [0, 3]

selectionsort : 336 ms

selectionsort2 : 572 ms

insertionsort : 285 ms

bubblesort : 1290 ms

bubblesort2 : 1177 ms

test for nearly ordered array, size = 20000, swap time = 100

selectionsort : 490 ms

selectionsort2 : 295 ms

insertionsort : 251 ms

bubblesort : 1687 ms

bubblesort2 : 1219 ms

選擇 插入 氣泡排序

選擇 插入 氣泡排序 說明 選擇排序 selection sort 插入排序 insertion sort 與氣泡排序 bubble sort 這三個排序方式是初學排序所必須知道的三個基本排序方式,它們由於速度不快而不實用 平均與最快的時間複雜度都是o n2 然而它們排序的方式確是值得觀察與 的。解...

排序 冒泡 選擇 插入

三種簡單排序 時間複雜度 o n 空間複雜度 o 1 氣泡排序的基本思想是通過比較兩個相鄰的記錄之間的比較和交換,使關鍵碼比較小的繼續逐漸從底部移向頂部 上公升 關鍵碼比較大的逐漸從頂部移向底部 沉底 冒泡由此得名。演算法思想 設有a 1 a n 的n個資料,氣泡排序的過程可以描述為 1 首先將相鄰...

選擇 插入 氣泡排序

size medium 選擇排序 將要排序的物件分作兩部份,乙個是已排序的,乙個是未排序的,從後端未排序部份選擇乙個最小值,並放入前端已排序部份的最後乙個,例如 排序前 70 80 31 37 10 1 48 60 33 80 1.1 80 31 37 10 70 48 60 33 80 選出最小值...