算法

来源:互联网 发布:cern数据 编辑:程序博客网 时间:2024/06/01 21:29

数据结构与算法

第一章 内容

数据结构:
+ 链表
+ 栈
+ 队列
+ 树
+ 图
+ 哈希
+ 堆

算法:
+ 排序
- 插入排序
- 希尔排序
- 冒泡排序
- 快速排序
- 选择排序
- 堆排序
- 归并排序
- 基数排序
+ 查找
- 顺序查找
- 折半查找
- 分块查找
- 二叉树查找
- 哈希查找
+ 子串搜索
- Boyer-Moore算法
- Horspool算法
- Sunday算法
- KMP算法
- KR算法
- AC自动机

算法技巧:
+ 贪婪
+ 分治
+ 动态规划
+ 随机化
+ 回溯

第2章 常用排序

$arr = array(17,6,5,9,8);/*25698*///冒泡排序function maopao($arr) {    for($i=1;$len=count($arr); $i<$len; $i++) {        for($j=$i-1; $j>=0; $j--) {            if($arr[$i] < $arr[$j]) {                $tmp = $arr[$i];                $arr[$i] = $arr[$j];                $arr[$j] = $tmp;            } else {                break;            }        }        }    return $arr;}
function cp($arr) {    for($i=1,$len=count($arr); $i<$len; $i++) {        if( $arr[$i] < $arr[$i-1] ) {            $j = $i-1;            $tmp = $arr[$i];            while($j>=0 && $tmp < $arr[$j]) {                $arr[$j+1] = $arr[$j];                $j-=1;            }            $arr[$j+1] = $tmp;        }    }    return $arr;}print_r(cp($arr));
// 希尔排序for($step = floor(count($arr)/2) ; $step>=1; $step = floor($step/2)) {    for($i=$step;$i<count($arr);$i++) {        $tmp = $arr[$i];        for($j=$i;$j>=$step;$j-=$step) {            if($tmp < $arr[$j-$step]) {                $arr[$j] = $arr[$j-$step];            } else {                break;            }        }        $arr[$j] = $tmp;    }}

二叉树

http://blog.devtang.com/blog/2015/06/16/talk-about-tech-interview/

class Node {    protected $value = null;    protected $left = null;    protected $right = null;    public function insert($value) {        if($this->value === null) {            $this->value = $value;        } else if($value <= $this->value) {            if($this->left === null) {                $this->left =new self();                $this->left->insert($value);            } else {                $this->left->insert($value);            }        } else if($value > $this->value) {            if($this->right === null) {                $this->right =new self();                $this->right->insert($value);            } else {                $this->right->insert($value);            }        }    }}$tree = new Node();$tree->insert(4);$tree->insert(2);$tree->insert(1);$tree->insert(3);$tree->insert(6);$tree->insert(5);$tree->insert(7);print_r($tree);
// 遍历function bianli($tree) {    if($tree->left!==null) {         bianli($tree->left);    }    echo $tree->value , '<br />';    if($tree->right!==null) {        bianli($tree->right);    }       }bianli($tree);
//反转二叉树function revTree($tree) {    if($tree->left !== null) {        $tree->left = revTree($tree->left);    }    if($tree->right !== null) {        $tree->right = revTree($tree->right);    }    $tmp = $tree->left;    $tree->left = $tree->right;    $tree->right = $tmp;    return $tree;}print_r( revTree($tree) );
0 0
原创粉丝点击