湖州公司网站建设,wordpress 说明手册,北京做手机网站建设,设计头条app官方网站2019独角兽企业重金招聘Python工程师标准 许多人都说算法是程序的核心#xff0c;算法的好坏决定了程序的质量。作为一个初级phper#xff0c;虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的#xff0c;它是程序开发的必备工具。这里介… 2019独角兽企业重金招聘Python工程师标准 许多人都说算法是程序的核心算法的好坏决定了程序的质量。作为一个初级phper虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的它是程序开发的必备工具。这里介绍冒泡排序插入排序选择排序快速排序四种基本算法分析一下算法的思路。 前提分别用冒泡排序法快速排序法选择排序法插入排序法将下面数组中的值按照从小到大的顺序进行排序。 $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析在要排序的一组数中对当前还未排好的序列从前往后对相邻的两个数依次进行比较和调整让较大的数往下沉较小的往上冒。即每当两相邻的数比较后发现它们的排序与排序要求相反时就将它们互换。 $arrarray(1,43,54,62,21,66,32,78,36,76,39);
function bubbleSort($arr)
{ $lencount($arr); //该层循环控制 需要冒泡的轮数 for($i1;$i$len;$i) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for($k0;$k$len-$i;$k) { if($arr[$k]$arr[$k1]) { $tmp$arr[$k1]; $arr[$k1]$arr[$k]; $arr[$k]$tmp; } } } return $arr;
} 2. 选择排序 思路分析在要排序的一组数中选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换如此循环到倒数第二个数和最后一个数比较为止。 function selectSort($arr) {
//双重循环完成外层控制轮数内层控制比较次数
$lencount($arr);
for($i0; $i$len-1; $i) {
//先假设最小的值的位置
$p $i; for($j$i1; $j$len; $j) {
//$arr[$p] 是当前已知的最小值
if($arr[$p] $arr[$j]) {
//比较发现更小的,记录下最小值的位置并且在下次比较时采用已知的最小值进行比较。
$p $j;
}
}
//已经确定了当前的最小值的位置保存到$p中。如果发现最小值的位置与当前假设的位置$i不同则位置互换即可。
if($p ! $i) {
$tmp $arr[$p];
$arr[$p] $arr[$i];
$arr[$i] $tmp;
}
}
//返回最终结果
return $arr;
} 3.插入排序 思路分析在要排序的一组数中假设前面的数已经是排好顺序的现在要把第n个数插到前面的有序数中使得这n个数也是排好顺序的。如此反复循环直到全部排好顺序。 function insertSort($arr) {
$lencount($arr);
for($i1, $i$len; $i) {
$tmp $arr[$i];
//内层循环控制比较并插入
for($j$i-1;$j0;$j--) {
if($tmp $arr[$j]) {
//发现插入的元素要小交换位置将后边的元素与前面的元素互换
$arr[$j1] $arr[$j];
$arr[$j] $tmp;
} else {
//如果碰到不需要移动的元素由于是已经排序好是数组则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
} 4.快速排序 思路分析选择一个基准元素通常选择第一个元素或者最后一个元素。通过一趟扫描将待排序列分成两部分一部分比基准元素小一部分大于等于基准元素。此时基准元素在其排好序后的正确位置然后再用同样的方法递归地排序划分的两部分。 function quickSort($arr) {
//先判断是否需要继续进行
$length count($arr);
if($length 1) {
return $arr;
}
//选择第一个元素作为基准
$base_num $arr[0];
//遍历除了标尺外的所有元素按照大小关系放入两个数组内
//初始化两个数组
$left_array array(); //小于基准的
$right_array array(); //大于基准的
for($i1; $i$length; $i) {
if($base_num $arr[$i]) {
//放入左边数组
$left_array[] $arr[$i];
} else {
//放入右边
$right_array[] $arr[$i];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
$left_array quick_sort($left_array);
$right_array quick_sort($right_array);
//合并
return array_merge($left_array, array($base_num), $right_array);
} 转载于:https://my.oschina.net/u/932455/blog/389451