php程序员应具有什么样的能力,才能更好的完成工作,才会有更好的发展方向呢?在中国我想您不会写一辈子代码的,那样不可能,过了黄金期,您又怎么办呢?看了本文后,希望对您有所帮助。 一,php能力 1,了解阶段,您能写一些代码,因为那是在手册和google的帮助下,您才完成的。变量乱定义,N多函数不知道,做起事来很慢,想到什么写什么,代码写的比较乱,后期维护很麻烦。 2,熟悉阶段,经常查函数,手册估计也看过一,二遍了,常用的函数基本上您都了解了。后 期维护给您带来了不少痛苦,您开始发现自己的代码有很多不足,开始思考如果改进自己的代码,如何站在项目的角度来规划自己的代码,而不是想到什么写什么, 知道如何来减少冗余代码,使您的代码清晰,知道什么样的代码写出来让人看着舒服,基本的代码规范,已经形成。为了提高自己,会特意的去一些技术性的论坛,…
May 1, 2015
PHP 四种基本排序算法的代码实现
这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路。
前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。
array(1,43,54,62,21,66,32,78,36,76,39);
1. 冒泡排序
思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
function bubbleSort($arr) { $len = count($arr); // 该层循环控制 需要冒泡的轮数 for ($i=1; $i < $len; $i++) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for ($k=0; $k < $len-$i; $k++) { if($arr[$k] > $arr[$k+1]) { $tmp = $arr[$k+1]; $arr[$k+1] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; }
2. 选择排序
思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
function selectSort($arr) { $len = count($arr); //双重循环完成,外层控制轮数,内层控制比较次数 for ($i=0; $i < $len-1; $i++) { // 先假设最小的值的位置 $p = $i; for ($k=$i+1; $k < $len; $k++) { // $arr[$p] 是当前已知的最小值 if($arr[$p] > $arr[$k]) { //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。 $p = $k; } } // 已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。 if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } return $arr; }
3.插入排序
思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
function insertSort($arr) { $len = count($arr); for ($i=1; $i < $len; $i++) { $tmp = $arr[$i]; // 内层循环控制,比较并插入 for ($j = $i - 1; $j >= 0 ; $j--) { if($tmp < $arr[$j]) { // 发现插入的元素要小,交换位置,将后边的元素与前面的元素互换 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else { // 如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } return $arr; }
4.快速排序
思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
function quickSort($arr) { $len = count($arr); // 先判断是否需要继续进行 if($len <= 1) { return $arr; } // 选择第一个元素作为基准 $base_num = $arr[0]; // 遍历除了标尺外的所有元素,按照大小关系放入两个数组内 // 初始化两个数组 $left_array = array(); // 小于基准的 $right_array = array(); // 大于基准的 for ($i=1; $i < $len; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; }else{ //放入右边数组 $right_array[] = $arr[$i]; } } // 再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数 $left_array = quickSort($left_array); $right_array = quickSort($right_array); // 合并 return array_merge($left_array, array($base_num), $right_array); }
- 原文链接: http://www.uuling.com/2015/03/25/php-四种基本排序算法的代码实现/
- 转载请注明: uuling 于 幽林的博客 发表