自己整理的知识点 “算法排序和查找”
来源:互联网 发布:阿里妈妈淘宝客优惠券 编辑:程序博客网 时间:2024/05/29 06:47
<?php
/*
@author nange
@time 2017/11/27
@content 算法排序类 和 查找算法的类
*/
Class Sort
{
/*
权限修饰符
public 公共的类内、外都可调用
private 私有的 只能类内调用
protected 受保护的 父类和子类可以调用
*/
/*
@parms $arr $array 需要排序的无序的数组
@return $arr $array 排序完的有序数组
@content 冒泡排序 时间复杂度O(n²); 空间复杂度O(n²)
@快速排序 时间复杂度O(n*㏒₂ⁿ)
*/
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 快速排序
@parms $arr $array 需要排序的无序的数组
@return $arr $array 排序完的有序数组
*/
public function QuickSort($arr){
$len = count($arr); //数组长度
if($len <=1){
return $arr;
}
//首先找出一个标杆
$base = $arr[0];
//定义两个空数组
$left = [];
$right = [];
for ($i=1;$i<$len;$i++) {
if ($arr[$i] < $base) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = $this->QuickSort($left);
$right = $this->QuickSort($right);
$arr = array_merge($left,[$base],$right);
return $arr;
}
/*
@content 选择排序
@params $arr array 一个需要排序的无序数组
@return $arr 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[$i],$arr[$min]) = [$arr[$min],$arr[$i]];
}
}
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;
}
/*
@content 二分查找递归实现方法
@params $arr array $k 一个排序的有序数组 和 要查找的数
@params $min int $k 键值的开始位置
@params $max int $k 键值的结束位置
@return $target 要查找的数
*/
public function BinaryRecursive($arr,$target,$min,$max)
{
$half = ceil(($min+$max)/2);
if ($arr[$half] > $target) {
return $this->BinaryRecursive($arr,$target,$min,$half-1);
} elseif ($arr[$half] < $target) {
return $this->BinaryRecursive($arr,$target,$half+1,$max);
} else {
return $half+1;
}
}
/*
@content 二分查找递归实现方法
@params $arr array $k 一个排序的有序数组 和 要查找的数
@params $min int $k 键值的开始位置
@params $max int $k 键值的结束位置
@return $target 要查找的数
*/
public function Binary($arr,$target,$min,$max)
{
while ($min<=$max) {
$half = ceil(($min+$max)/2);
if ($arr[$half] > $target) {
$max = $half-1;
} elseif ($arr[$half] < $target) {
$min = $half +1;
} else {
return $half;
}
}
return -1;
}
}
Class Homework
{
public function Getenum($arr) {
$len = count($arr);
$data = [];
if($len == 0 || !$arr){
return false; }
$num = 0;
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]){
$num++;
if($num%10==0)
echo "<br>";
$data[] = $arr[$i].$arr[$j].$arr[$k]."\n";
}
}
}
}
return $data;
}
}
?>
/*
@author nange
@time 2017/11/27
@content 算法排序类 和 查找算法的类
*/
Class Sort
{
/*
权限修饰符
public 公共的类内、外都可调用
private 私有的 只能类内调用
protected 受保护的 父类和子类可以调用
*/
/*
@parms $arr $array 需要排序的无序的数组
@return $arr $array 排序完的有序数组
@content 冒泡排序 时间复杂度O(n²); 空间复杂度O(n²)
@快速排序 时间复杂度O(n*㏒₂ⁿ)
*/
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 快速排序
@parms $arr $array 需要排序的无序的数组
@return $arr $array 排序完的有序数组
*/
public function QuickSort($arr){
$len = count($arr); //数组长度
if($len <=1){
return $arr;
}
//首先找出一个标杆
$base = $arr[0];
//定义两个空数组
$left = [];
$right = [];
for ($i=1;$i<$len;$i++) {
if ($arr[$i] < $base) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = $this->QuickSort($left);
$right = $this->QuickSort($right);
$arr = array_merge($left,[$base],$right);
return $arr;
}
/*
@content 选择排序
@params $arr array 一个需要排序的无序数组
@return $arr 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[$i],$arr[$min]) = [$arr[$min],$arr[$i]];
}
}
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;
}
/*
@content 二分查找递归实现方法
@params $arr array $k 一个排序的有序数组 和 要查找的数
@params $min int $k 键值的开始位置
@params $max int $k 键值的结束位置
@return $target 要查找的数
*/
public function BinaryRecursive($arr,$target,$min,$max)
{
$half = ceil(($min+$max)/2);
if ($arr[$half] > $target) {
return $this->BinaryRecursive($arr,$target,$min,$half-1);
} elseif ($arr[$half] < $target) {
return $this->BinaryRecursive($arr,$target,$half+1,$max);
} else {
return $half+1;
}
}
/*
@content 二分查找递归实现方法
@params $arr array $k 一个排序的有序数组 和 要查找的数
@params $min int $k 键值的开始位置
@params $max int $k 键值的结束位置
@return $target 要查找的数
*/
public function Binary($arr,$target,$min,$max)
{
while ($min<=$max) {
$half = ceil(($min+$max)/2);
if ($arr[$half] > $target) {
$max = $half-1;
} elseif ($arr[$half] < $target) {
$min = $half +1;
} else {
return $half;
}
}
return -1;
}
}
Class Homework
{
public function Getenum($arr) {
$len = count($arr);
$data = [];
if($len == 0 || !$arr){
return false; }
$num = 0;
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]){
$num++;
if($num%10==0)
echo "<br>";
$data[] = $arr[$i].$arr[$j].$arr[$k]."\n";
}
}
}
}
return $data;
}
}
?>
阅读全文
0 0
- 自己整理的知识点 “算法排序和查找”
- 基础知识点总结:查找和排序算法
- 自己整理的快速排序算法
- 整理常见的数据结构和算法知识点
- 查找和排序算法
- 算法--排序和查找
- 排序和查找算法
- 数据结构中排序和查找的算法
- 简单的排序和查找算法
- 常见排序和查找算法的实现
- java常用的排序和查找算法
- 关于数组的排序和查找算法
- PHP常用的排序和查找算法
- 排序算法和查找算法
- 排序算法和查找算法
- 排序算法和查找算法
- 排序算法和查找算法
- 查找算法和排序算法
- TensorFlow学习笔记8:CNN搭建(layer,estimator等)
- groovy之closure
- dedecms织梦后台模板layui框架-20171126更新
- HDU 1274 展开字符串(递归)
- c语言函数
- 自己整理的知识点 “算法排序和查找”
- [python]使用channels库时遇到的一些问题
- 链式栈实现迷宫寻径
- Hibernate 级联删除异常 deleted object would be re-saved by cascade
- CSS3-转换之scale
- Josephus环问题——顺序表求解
- bzoj3651 网络通信(LCT)
- 基于SSH框架-CRM客户资源管理系统-简单小项目开发记录-CRM系统-03
- Android Studio打开Android Device Monitor报错