php中的冒泡和快速排序演算法

2021-07-28 11:57:21 字數 2136 閱讀 6797

1、系統內建排序函式

<?php

//排序演算法

$arr = [3,1,7,9,5,4];

sort($arr);

print_r($arr);

array

( [0] => 1

[1] => 3

[2] => 4

[3] => 5

[4] => 7

[5] => 9

)

上面是對簡單資料型別的排序,那麼給類物件排序呢?

class

user

}$arr = [

new user(3),

new user(1),

new user(7),

new user(9),

new user(5),

new user(4),

];sort($arr);

print_r($arr);

我們發現sort函式對這個簡單的user類物件也能排序

array

( [0] => user object

([age] => 1

)[1] => user object

([age] => 3

)[2] => user object

([age] => 4

)[3] => user object

([age] => 5

)[4] => user object

([age] => 7

)[5] => user object

([age] => 9

))

如果user類複雜一點:

class

user

}

我們可以使用另外乙個函式usort來指定按照age排序:

usort($arr,function ($a,$b)

return

$a->age >

$b->age ?

1 : -

1;});

2、氣泡排序

n個數字來排序,外層迴圈n-1,內層迴圈n-1-i,比較j和j+1,並交換

$arr = [3,1,7,9,5,4];

$n = count($arr);

for ($i=0;$i

<$n-1;$i++)

}}

氣泡排序是每個數字,逐個檢查。演算法簡單穩定,不需要額外空間。但是效率很低,迴圈太多。

3、快速排序

取第乙個出來,<=它的,放左邊,否則放右邊。然後遞迴,最後合併

function

quick_sort

(array $arr)

$x = array();

$y = array();

$n = count($arr);

//第乙個成員

$k = $arr[0];

for ($i=1;$i

<$n;$i++)else

}//遞迴接著排序

$x = quick_sort($x);

$y = quick_sort($y);

return array_merge($x,array($k),$y); //這裡合併要注意順序

}

$arr = [3,1,7,9,5,4];

$newarr = quick_sort($arr);

print_r($newarr);

array

( [0] => 1

[1] => 3

[2] => 4

[3] => 5

[4] => 7

[5] => 9

)

快速排序法是排序演算法中最高效的一種,但是需要很多記憶體空間。

php排序演算法 氣泡排序和快速排序

總是對這兩種排序特別迷糊,今天趁活不多,認真看了下,也算對自己有個交代吧 第一 氣泡排序 預設從小到大排序 若從小到大則第二個引數為true function bubbling sort arr,state false else return arr 上午寫了冒泡法,整體思路還是很清晰的,但是到快速...

php排序演算法 氣泡排序,快速排序

氣泡排序實現原理 首先將所有待排序的數字放入工作列表中。從列表的第乙個數字到倒數第二個數字,逐個檢查 若某一位上的數字大於他的下一位,則將它與它的下一位交換。重複步驟 直至再也不能交換。實現 複製 如下 氣泡排序 by www.jbxue.com function bubbingsort array...

氣泡排序和快速排序演算法

氣泡排序 原理 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。實現 public...