js實現十種排序演算法

2021-08-08 18:34:45 字數 2956 閱讀 2938

排序演算法

平均情況

最好情況

最壞情況

空間複雜度

穩定性氣泡排序

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 與冒泡 選擇相同,適用於排序小列表 若列表基本有序,則插入...