排序算法

来源:互联网 发布:无线网卡安装后无网络 编辑:程序博客网 时间:2024/05/29 05:02
<?php
/*


* @author   zzp
* @time     2017/11/27
* @content  排序算法的类



 */










Class Sort
{
//权限修饰符 
//public 公共的 类内 类外 继承 都可调用
//private  私有的  只可以类内调用
//protected  受保护的  父类和子类 可以调用

//冒泡排序
//数组中相邻的两个数 依次比较大小 如果符合我们的条件则不变 不符合条件的调换两个数的位置

/*
@content 冒泡排序
@params  $arr array 需要排序的无序数组
@return  $arr array 排好序的有序数组
*/

public function BubbleSort($arr)
{
$len = count($arr);
//控制循环的层数
for ($i=1;$i<$len;$i++) {
//控制比较的次数
for ($j=0;$j<$len-$i;$j++) {
if ($arr[$j] > $arr[$j+1]) {
list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
}
}
}


return $arr;
}




/*
@content 快速排序
@params  $arr array 需要排序的无序数组
@return  $arr array 排好序的有序数组
*/

public function QuickSort($arr)
{
$len = count($arr);
if ($len <=1) {
return $arr;
}
//定义我们的标杆
$base = $arr[0];
$big = [];
$small = [];
for ($i=1;$i<$len;$i++) {
if ($arr[$i] > $base) {
$big[] = $arr[$i];
} else {
$small[] = $arr[$i];
}
}
$left = $this->QuickSort($small);
$right = $this->QuickSort($big);
$arr = array_merge($left,[$base],$right);


return $arr;
}




/*
@content 获取不重复的三位数
@params  $arr array 长度为5的不重复索引数组
@returnn $data array  所有符合条件的数的集合
*/
public function GetNum($arr)
{
$len = count($arr);
$data = [];
for ($i=0;$i<$len;$i++) {
if ($arr[$i] ==0) continue;
for ($j=0; $j < $len; $j++) { 
for ($k=0; $k < $len ; $k++) { 
if ($arr[$i] !=$arr[$j] && $arr[$i] != $arr[$k] && $arr[$j] != $arr[$k]) {
$data[] = $arr[$i].$arr[$j].$arr[$k];
}
}
}
}


return $data;
}

/*
@content 选择排序
@params  $arr array  无序索引数组
@returnn $data array  排好序的有序数组
*/
public function SelectSort($arr)
{
$len = count($arr);
for ($i=0;$i<$len-1;$i++) {
//我们认为的最小值的位置
$min = $i;
for ($j=$i+1;$j<$len;$j++) {
if ($arr[$min] > $arr[$j]) {
$min = $j;
}
}
if($min != $i) {
list($arr[$min],$arr[$i]) = [$arr[$i],$arr[$min]];
}


}


return $arr;
}


/*
@content 插入排序
@params  $arr array  有序数组插入一个新元素后的结果
@returnn $arr array  排好序的有序数组
*/


public function InsertSort($arr)
{
$len = count($arr);


for ($i=1;$i<$len;$i++) {
for ($j=$i-1;$j>=0;$j--) {
if ($arr[$j] > $arr[$j+1]) {
list($arr[$j+1],$arr[$j]) = [$arr[$j],$arr[$j+1]];
} else {
break;
}
}
}


return $arr;
}




}


?>