測試評估:14種排序算法和PHP數(shù)組
在這篇文章里,我將向大家介紹用PHP寫的排序算法的測試。
以下是14種排序算法:
- 快速排序
- 計(jì)數(shù)排序
- 梳排序
- 堆排序
- 歸并排序
- 希爾排序
- 選擇排序
- 插入排序
- 地精排序
- 聯(lián)合冒泡排序
- 雞尾酒排序
- 冒泡排序
- 奇偶排序
- 使用標(biāo)志的冒泡排序
算法不是按字母排序,而是按照它們進(jìn)行8千個(gè)元素排序時(shí)整體速度遞減來排序。
以下是用到的數(shù)組的大小:
- 1
- 100
- 200
- 400
- 600
- 800
- 1000
- 5000
- 10000
- 15000
- 20000
- 25000
- 30000
每次測量都用不同大小的數(shù)組,然后傳入排序函數(shù)。
- ***種情況下,數(shù)組被隨機(jī)填充(1,N)之間的值,其中N指數(shù)組的大小。
- 第二種情況下,數(shù)組被隨機(jī)填充(1,PHP_INT_MAX)之間的值,其中PHP_INT_MAX是指當(dāng)前系統(tǒng)中INT類型的***值,在我的系統(tǒng)中為2^63或大約為9.2233720368548E+18。
每種測試進(jìn)行3次,然后取其算術(shù)平均值。
1000個(gè)元素的數(shù)組
在當(dāng)前數(shù)組大小的所有算法排序情況。
30000個(gè)元素的數(shù)組
此時(shí),5種最快的算法進(jìn)行測試:計(jì)數(shù)排序,快速排序,梳排序,堆排序和歸并排序。
200000個(gè)元素的數(shù)組
此時(shí),5種最快的算法進(jìn)行測試:計(jì)數(shù)排序,快速排序,梳排序,堆排序和歸并排序。
2000000個(gè)元素的數(shù)組
在***一輪2000000個(gè)元素的測試中,只有2種算法進(jìn)行測試:計(jì)數(shù)排序和快速排序。
總結(jié)
快速排序是實(shí)至名歸的好算法。計(jì)數(shù)排序在小值范圍里表現(xiàn)良好;其他情況因?yàn)榈蛢?nèi)存而應(yīng) 付不來。雞尾酒排序?qū)τ陔S機(jī)值是一個(gè)壞選擇。冒泡排序及其變形并不適合實(shí)際應(yīng)用。
所有算法的源代碼+結(jié)果:https://drive.google.com/file/d/0B63HSL7JD630VWdSSFgwdHR5RkU/edit?usp=sharing
使用內(nèi)置排序函數(shù)是一個(gè)有趣的練習(xí)。使用解釋型的PHP來寫排序函數(shù)永遠(yuǎn)也快不過sort() 采用的C變體。
原文鏈接: ahwoobachairiesaas 翻譯: 伯樂在線 - hoikin-yiu