排序演算法
平均情況
最好情況
最壞情況
空間複雜度
穩定性氣泡排序
o(n2)
o(n)
o(n2)
o(1)
穩定快速排序
o(nlog2n)
o(nlog2n)
o(n2)
o(log2n)~o(n)
不穩定直接插入排序
o(n2)
o(n)
o(n2)
o(1)
穩定希爾排序
o(nlog2n)~o(n2)
o(n1.3)
o(n2)
o(1)
不穩定簡單選擇排序
o(n2)
o(n2)
o(n2)
o(1)
不穩定堆排序
o(nlog2n)
o(nlog2n)
o(nlog2n)
o(1)
不穩定歸併排序
o(nlog2n)
o(nlog2n)
o(nlog2n)
o(n)
穩定基數排序
o(d(n+m))
o(d(n+m))
o(d(n+m))
o(m)穩定
①當待排序記錄個數n較大,關鍵碼分布較隨機,且對穩定性不作要求,採用快速排序。
②當待排序記錄個數n較大,記憶體空間允許,且要求排序穩定,採用歸併排序。
③當待排序記錄個數n較大,關鍵碼分布可能出現正序或者逆序的情況,且對穩定性不作要求,採用堆排序或者歸併排序
④當待排序記錄個數n較大,而只是找出最小的前幾個記錄,採用堆排序或簡單選擇排序。
⑤當待排序記錄個數n較小,記錄已基本有序,且要求穩定時,採用直接插入排序。
⑥當待排序記錄個數n較小,記錄所含資料項較多,所佔儲存空間較大時,採用簡單選擇排序
⑦快速排序和歸併排序在待排序記錄個數n值較小時的效能不如直接插入排序。
1.氣泡排序
氣泡排序(屬於交換排序):function bubblesort(a)
}} return a;
}
時間複雜度 平均情況:o(n^2) 最好情況:o(n) 最壞情況:o(n^2)
空間複雜度 o(1)
穩定基本思想:兩兩比較相鄰數值,如果反序則交換位置。
2.快速排序
直接插入排序function partition(arr,first,end)
a[j+1] = temp;
} return a;
}
時間複雜度
平均情況:o(n2)
最好情況:o(n)
最壞情況:o(n2)
空間複雜度o(1)
穩定
基本思想:依次將待排序中的每乙個記錄插入到乙個已排好序的序列中,直到全部記錄都排好序。
4.希爾排序
堆排序function shellsort(a)
}}function heapsort(a)
for (var i = n/2; i >= 1; i--)
for (var i = 1; i < n; i++)
for (var i = 0; i < n; i++)
return a;
}
時間複雜度 平均情況:o(nlog2n) 最好情況:o(nlog2n) 最壞情況:o(nlog2n) —— 2為log的下標。
空間複雜度 o(1)
不穩定基本思想:簡單選擇排序的改進法。首先將待排序的記錄序列構造成乙個堆,此時,選出來堆中所有的記錄的最大者即堆頂記錄。
然後再將堆頂記錄移走,並將剩餘的記錄再調整成堆,這樣又找出了次大的記錄。以此類推,知道堆中只有乙個記錄為止。
7.歸併排序的非遞迴實現
歸併排序的遞迴演算法function merge(r,r1,s,m,t)
if (i<=m)
else
}function mergepass(r,r1,n,h)
if (i歸併排序非遞迴演算法
時間複雜度 平均情況:o(nlog2n) 最好情況:o(nlog2n) 最壞情況:o(nlog2n) —— 2為log的下標。
空間複雜度 o(n)
穩定基本思想:將若干個有序序列進行兩兩歸併,直至所有待排序記錄都在乙個有序序列為止。
8.歸併排序的遞迴實現
function merge(r,r1,s,m,t)
if (i<=m)
else
}function mergesort(r,r1,s,t)
}function mergesort2(r)
時間複雜度 平均情況:o(nlog2n) 最好情況:o(nlog2n) 最壞情況:o(nlog2n) —— 2為log的下標。
空間複雜度 o(n)
穩定基本思想:將若干個有序序列進行兩兩歸併,直至所有待排序記錄都在乙個有序序列為止。
9.折半插入排序
折半插入排序function halfsort(r)
for ( var j=i; j > low; j--)
r[low] = insertnote;
} return r;
}
時間複雜度 平均情況:o(n^2) 最好情況:o(n^2) 最壞情況:o(n^2)
空間複雜度 o(1)
穩定基本思想:借助折半查詢的思想進行折半排序
十種排序演算法
1.常見演算法分類 十種常見排序演算法一般分為以下幾種 1 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 2 線性時間非比較類排序 計數排序 基數排序和桶排序。總結 1 在比較類排序中...
十種JAVA排序演算法例項
一 冒泡 bubble 排序 複製 如下 void bubblesortarray 效率 o n 適用於排序小列表。二 選擇排序 複製 如下 void selectsortarray arr j 1 temp 最佳效率o n 最糟效率o n 與冒泡 選擇相同,適用於排序小列表 若列表基本有序,則插入...
十種JAVA排序演算法例項
一 冒泡 bubble 排序 複製 如下 void bubblesortarray 效率 o n 適用於排序小列表。二 選擇排序 複製 如下 void selectsortarray arr j 1 temp 最佳效率o n 最糟效率o n 與冒泡 選擇相同,適用於排序小列表 若列表基本有序,則插入...