自己学习PHP基础之后,琢磨了一下经典的排序算法。
<?php
/**
* @package test
* @author lnc
* @copyright lnc
*/
//PHP一些经典算法的练习使用
class PhpSuanfa{
/* 冒泡排序的的方法实现
* 原理:由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序
* */
public function maopao($array){
$len = count($array);
// var_dump($len);
if($len <= 1) {
return $array;
}
for ($i=0; $i<$len; $i++){
for ($j=$len-1; $j>$i;$j--){
if($array[$j]>$array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
/* 快速排序方法的实现
* 原理:快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
* */
public function quickSort($array){
$len = count($array);
if ($len<=1){
return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<$len; $i++){
if($array[$i]<=$key){
$left_arr[] = $array[$i];
}else{
$right_arr[] = $array[$i];
}
}
$left_arr = $this->quickSort($left_arr) ;//注意类的方法是有作用域的,所以一定要记得用$this指向当前的方法
$right_arr = $this->quickSort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
/* 选择排序方法的实现
* 原理:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法
* */
public function select_sort($array){
if (!is_array($array)){
return false;
}
$len = count($array);
for ($i=0; $i<$len-1; $i++){
for ($j=$i+1; $j<$len; $j++){
if ($array[$i]>$array[$j]){
$temp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $temp;
}
}
}
return $array;
}
/* 插入排序方法的实现
* 原理: 从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到下一位置中
重复步骤2 * */
public function insert_sort($array){
$count = count($array);
for ($i=1; $i<$count; $i++){
$temp = $array[$i];
$j = $i-1;
while ($array[$j]>$temp){
$array[$j+1] = $array[$j];
$array[$j] = $temp;
$j--;
}
}
return $array;
}
}
$arr = array();
for ($i=0; $i<10; $i++){
$arr[$i] = rand(0, 500);
}
print_r($arr);
$print = new PhpSuanfa($this);
// $p = $print->maopao($arr);
// $p = $print->quickSort($arr);
// $p = $print->select_sort($arr);
$p = $print->insert_sort($arr);
var_dump($p);
print_r($p);
?>