-
冒泡排序
思路:每次遍历,大的元素就像气泡一样,移位到有序队列中。
for($i=0; $i<$len; $i++) {
for($j=0; $j<$len-$i-1; $j++) {
if($a[$j] > $a[$j+1]) {
$t = $a[$j];
$a[j] = $a[$j+1];
$a[$j+1] = $t;
} } }
-
插入排序
算法:每次遍历从无序数组中拿出一个元素,放入有序队列中。
for($i=1;$i<$len;$i++) {
for($j=0;$j<$i;$j++) {
if($a[$j] > $a[$i]) {
$t = $a[$j];
$a[j] = $a[$i];
$a[$i] = $t;
} } }
-
选择排序
思路:每次遍历,从无序数组中找到最小或大的元素,放入有序队列中。
for($i=0,$len = count($a); $i<$len; $i++) {
for($j=$i; $j<$len; $j++) {
if($a[$j] > $a[$j+1]) {
$t = $a[$j+1];
$a[j+1] = $a[$j];
$a[$j] = $t;
} } }
-
快速排序
算法:先把数组一分为二,大于中间元素的所有元素放到右边,小于中间元素的所有元素放到左边,然后再对两边的数组进行相同的操作,最后合并。
function fastSort($d){
$mid = $d[0];
$leftarr = $rightarr = array();
for($i=1, $len=count($d);$i<$len;$i++) {
if($d[$i] < $mid){
array_push($leftarr,$d[$i]);
}else{
array_push($rightarr,$d[$i]);
} }
$leftarr = fastSort($leftarr);
$rightarr = fastSort($rightarr);
return array_merge($leftarr,array($mid),$rightarr);
}
-
归并排序
算法:将两个已经排序好的序列,合并成一个有序的队列。
function mergeArray($arrA, $arrB) {
$a_i = $b_i = 0; //设置两个起始位置标记
$a_len = count($arrA);
$b_len = count($arrB);
while($a_i<$a_len && $b_i<$b_len) {
//当数组A和数组B都没有越界时
if($arrA[$a_i] < $arrB[$b_i]) {
$arrC[] = $arrA[$a_i++];
} else {
$arrC[] = $arrB[$b_i++];
}
}
//判断 数组A内的元素是否都用完了,没有的话将其全部插入到C数组内:
while($a_i < $a_len) {
$arrC[] = $arrA[$a_i++];
}
//判断 数组B内的元素是否都用完了,没有的话将其全部插入到C数组内:
while($b_i < $b_len) {
$arrC[] = $arrB[$b_i++];
}
return $arrC;
}
-
堆排序
算法:完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,堆排序是一种树形选择排序。当每个节点都大于等于它的两个子节点时,就称为大顶堆,当每个节点都小于等于它的两个子节点时,就称为小顶堆。