- 插入排序
插入排序正如其名
[49] 38 65 97 76 13 27 49
J=2(38) [38 49] 65 97 76 13 27 49
J=3(65) [38 49 65] 97 76 13 27 49
J=4(97) [38 49 65 97] 76 13 27 49
J=5(76) [38 49 65 76 97] 13 27 49
J=6(13) [13 38 49 65 76 97] 27 49
J=7(27) [13 27 38 49 65 76 97] 49
J=8(49) [13 27 38 49 49 65 76 97]
代码如下
function insert_sort($arr){
for ($i=0; $i <count($arr); $i++) {
$tmp=$arr[$i];
for ($j=$i-1;$j>=0;$j--) {
if($tmp<$arr[$j]){
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
return $arr;
}
- 冒泡排序
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
步骤:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
//冒泡排序
function bubble_sort($arr){
//控制第几轮
for ($i=1; $i<count($arr); $i++) {
for ($j=0; $j<count($arr)-$i; $j++) {
if ($arr[$j]>$arr[$j+1]) {
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
return $arr;
}
- 快速排序
思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
//快速排序
function quick_sort($arr){
//如果数组元素个数小于1,直接返回数组
if (count($arr)<=1) {
return $arr;
}
//寻找一个基准,第一个元素或者最后一个元素
$base_num=$arr[0];
$right_arr=array();
$left_arr=array();
for ($i=1; $i <count($arr) ; $i++) {
if ($arr[$i]>$base_num) {
$right_arr[]=$arr[$i];
}else{
$left_arr[]=$arr[$i];
}
}
//递归调用
$right_arr=quick_sort($right_arr);
$left_arr=quick_sort($left_arr);
return array_merge($left_arr,array($base_num),$right_arr);
}
- 选择排序
思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
//选择排序
function select_sort($arr){
for ($i=0; $i<count($arr)-1; $i++) {
$p=$i;
for ($j=$i+1; $j<count($arr); $j++) {
if ($arr[$p]>$arr[$j]) {
$p=$j;
}
}
if($p!=$i){
$tmp=$arr[$i];
$arr[$i]=$arr[$p];
$arr[$p]=$tmp;
}
}
return $arr;
}