# php
# php四种基本算法(冒泡、选择、快速、插入)
<?php
/**
* Created by PhpStorm.
* User: djspy
* Date: 2017/8/1
* Time: 14:42
*/
/**
* @param array $arr
*
* @return array
* 冒泡排序
* 两两比较,较大值放后面
* [4,3,2,1]->[3,4,2,1]->[3,2,4,1]->[3,2,1,4]
* [2,3,1,4]->[2,1,3,4]->[1,2,3,4]
*/
function bubbleSort(array $arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
for ($j = 0; $j < $count - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$tmp = $arr[$j + 1];
$arr[$j + 1] = $arr[$j];
$arr[$j] = $tmp;
}
var_dump($arr);
}
}
return $arr;
}
/**
* @param array $arr
*
* @return array
* 快速排序
* 使用递归的思想
* 将第一个值作为中间值,循环比较,比其小的值放入left数组,反之放入right数组,然后进行递归
* array_merge合并数组
* 注: 合并时加入中间值
*/
function quickSort(array $arr)
{
$count = count($arr);
if ($count <= 1) {
return $arr;
}
$middle = $arr[0];
$left = [];
$right = [];
for ($i = 1; $i < $count; $i++) {
if ($middle < $arr[$i]) {
$right[] = $arr[$i];
} else {
$left[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, [$middle], $right);
}
/**
* @param array $arr
*
* @return array
* 选择排序
* 从待排序的数组中选出最小值,放在起始位置
* [4,3,2,1]->[1,4,3,2]->[1,2,4,3]->[1,2,3,4]
*/
function selectSort(array $arr) {
$count = count($arr);
for ($i = 0; $i < $count; $i++) {
$min = $i;
for ($j = $i; $j < $count; $j++) {
if ($arr[$min] > $arr[$j]) {
$min = $j;
}
}
if ($min != $i) {
list($arr[$min], $arr[$i]) = [$arr[$i], $arr[$min]];
}
}
return $arr;
}
/**
* @param array $arr
*
* @return array
* 插入排序
* 将待比较的值插入到合适的位置
* [4,1,3,2]->[1,4,3,2]->[1,3,4,2]->[1,2,3,4]
*/
function insertSort(array $arr) {
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
$tmp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j --) {
if ($tmp < $arr[$j]) {
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
$a = [4, 1, 3, 2];
var_dump(array_unique(bubbleSort($a)));
var_dump(array_unique(quickSort($a)));
var_dump(array_unique(selectSort($a)));
var_dump(array_unique(insertSort($a)));
// 直接使用自带的方法
sort($a);
var_dump($a);
asort($a);
var_dump($a);
# php策略模式
<?php
use Symfony\Component\DependencyInjection\Reference;
/**
* Class Preferences
* 单例模式
* 具体实现
* 1.私有的构造函数
* 2.含有一个该类的静态私有对象
* 3.提供一个静态的公有函数用于创建或获取它本身的私有对象
* 4.一个私有的clone方法防止克隆
*/
class Preferences {
private $props = [];
private static $instance;
private function __construct() {}
public static function getInstance() {
if (empty(self::$instance)) {
self::$instance = new Preferences();
}
return self::$instance;
}
public function setProperty($key, $val)
{
$this->props[$key] = $val;
}
public function getProperty($key)
{
echo $this->props[$key];
}
private function __clone()
{
}
}
$db = Preferences::getInstance();
$db->setProperty("name", 'xx');
$db->getProperty("name");
unset($db);
$db2 = Preferences::getInstance();
$db2->getProperty("name");
mysql优化 →