<?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;
}
}
?>
/*
* @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;
}
}
?>