php幾種排序演算法的比較

2022-08-12 17:06:19 字數 2930 閱讀 1253

/*

* php 四種排序演算法的時間與內建的sort排序比較

* 3000個元素,四種演算法的排序所用的時間比較

* 氣泡排序 857.98192024231ms

* 選擇排序 903.74493598938ms

* 插入排序 296.8270778656ms

* 快速排序 15.607833862305ms

* sort排序 0.95200538635254ms

* 歸併排序 14.61386680603ms

* */

/** @param 氣泡排序

* 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

* 走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

* */

function bubblesort($arr)

}if(!$flag) return $arr;

}}/*

* @param 選擇排序法

* 每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。

* 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)

* */

function selectsort($array)

}$temp = $array[$i];

$array[$i] = $array[$minvalindex];

$array[$minvalindex] = $temp;

}}/*

* 插入排序法

* 每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。

* 演算法適用於少量資料的排序,時間複雜度為o(n^2)。是穩定的排序方法。

* */

function insertsort($array)

if($insertindex + 1 !== $i)

}}/*

* 快速排序法

* 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,

* 然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

* */

function quicksort($array)

$leftarray = quicksort($leftarray); //把比較小的陣列再一次進行分割

$leftarray = $mid; //把分割的元素加到小的陣列後面,不能忘了它哦

$rightarray = quicksort($rightarray); //把比較大的陣列再一次進行分割

return array_merge($leftarray,$rightarray); //組合兩個結果}/*

* 歸併排序

* 歸併排序是指將兩個或兩個以上有序的數列(或有序表),合併成乙個仍然有序的數列(或有序表)。

* 這樣的排序方法經常用於多個有序的資料檔案歸併成乙個有序的資料檔案。

* */

function mergesort(&$arr)

//實際實現歸併排序的程式

function msort(&$arr, $left, $right)

}//將兩個有序陣列合併成乙個有序陣列

function mergearray(&$arr, $left, $center, $right) else

}//判斷 陣列a內的元素是否都用完了,沒有的話將其全部插入到c陣列內:

while($a_i <= $center)

//判斷 陣列b內的元素是否都用完了,沒有的話將其全部插入到c陣列內:

while($b_i <= $right)

//將$arrc內排序好的部分,寫入到$arr內:

for($i=0, $len=count($temp); $i<$len; $i++)

}$a = array_rand(range(1,10000), 3000); //生成3000個元素的隨機數組

shuffle($a); //打亂陣列的順序

$t1 = microtime(true);

bubblesort($a); //氣泡排序

$t2 = microtime(true);

echo "氣泡排序用時:".(($t2-$t1)*1000).'ms'."\n";

$t3 = microtime(true);

selectsort($a); //選擇排序

$t4 = microtime(true);

echo "選擇排序用時:".(($t4-$t3)*1000).'ms'."\n";

$t5 = microtime(true);

insertsort($a); //插入排序

$t6 = microtime(true);

echo "插入排序用時:".(($t6-$t5)*1000).'ms'."\n";

$t7 = microtime(true);

quicksort($a); //快速排序

$t8 = microtime(true);

echo "快速排序用時:".(($t8-$t7)*1000).'ms'."\n";

$t9 = microtime(true);

sort($a);

$t10 = microtime(true);

echo "sort排序用時:".(($t10-$t9)*1000)."ms"."\n";

$t11 = microtime(true);

mergesort($a);

$t12 = microtime(true);

echo "歸併排序用時:".(($t12-$t11)*1000)."ms";

幾種排序演算法比較

資料結構 10 排序十 四 排序 sort thinking in algorithm 12.詳解十一種排序演算法 排序法平均時間 最差情形 穩定度額外空間 備註冒泡 o n2 o n2 穩定o 1 n小時較好 交換o n2 o n2 不穩定o 1 n小時較好 選擇o n2 o n2 不穩定o 1 ...

幾種排序演算法的比較

1.分類 非線性時間比較類排序 通過比較來決定元素間的相對位置關係,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間比較類排序 不通過比較來決定元素間的相對位置關係,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間比較類排序。2.複雜度 3.演算法相關...

幾種常用排序演算法的比較

菜鳥前路,帶你感受不一樣的程式設計之路!1.選擇法 演算法要求 例 用選擇法對10個整數按降序排序。演算法分析 每趟選出乙個最值和無序序列的第乙個數交換,n個數共選n 1趟。第i趟假設i為最值下標,然後將最值和i 1至最後乙個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素...