綜合對比:一、選擇排序
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 選出最小值...