<? 
//-------------------- 
// 基本数据结构算法
//-------------------- 
//二分查找(数组里查找某个元素) 
function bin_sch($array,  $low, $high, $k){  
    if ( $low <= $high){  
        $mid =  intval(($low+$high)/2 );  
        if ($array[$mid] ==  $k){  
            return $mid;  
        }elseif ( $k < $array[$mid]){  
            return  bin_sch($array, $low,  $mid-1, $k);  
        }else{  
            return  bin_sch($array, $mid+ 1, $high, $k);  
        }  
    }  
    return -1;  
}  
//顺序查找(数组里查找某个元素) 
function  seq_sch($array, $n,  $k){  
    $array[$n] =  $k;  
    for($i=0;  $i<$n; $i++){  
        if( $array[$i]==$k){  
            break;  
        }  
    }  
    if ($i<$n){  
        return  $i;  
    }else{  
        return -1;  
    }  
}  
//线性表的删除(数组中实现) 
function delete_array_element($array , $i) 

        $len =  count($array);  
        for ($j= $i; $j<$len; $j ++){ 
                $array[$j] = $array [$j+1]; 
        } 
        array_pop ($array); 
        return $array ; 

//冒泡排序(数组排序) 
function bubble_sort( $array) 

        $count = count( $array); 
        if ($count <= 0 ) return false; 
        for($i=0 ; $i<$count; $i ++){ 
                for($j=$count-1 ; $j>$i; $j--){ 
                        if ($array[$j] < $array [$j-1]){ 
                                 $tmp = $array[$j]; 
                                 $array[$j] = $array[ $j-1]; 
                                $array [$j-1] = $tmp; 
                        } 
                } 
        } 
        return $array; 

//快速排序(数组排序) 
function quick_sort($array ) { 
        if (count($array) <= 1) return  $array; 
        $key = $array [0]; 
        $left_arr  = array(); 
        $right_arr = array(); 
        for ($i= 1; $i<count($array ); $i++){ 
                if ($array[ $i] <= $key) 
                        $left_arr [] = $array[$i]; 
                else 
                         $right_arr[] = $array[$i ]; 
        } 
        $left_arr = quick_sort($left_arr ); 
        $right_arr = quick_sort( $right_arr); 
        return array_merge($left_arr , array($key), $right_arr); 
}

//------------------------ 
// PHP内置字符串函数实现 
//------------------------ 
//字符串长度 
function strlen ($str) 

        if ($str == '' ) return 0; 
        $count =  0; 
        while (1){ 
                if ( $str[$count] != NULL){ 
                         $count++; 
                        continue; 
                }else{ 
                        break; 
                } 
        } 
        return $count; 

//截取子串 
function substr($str, $start,  $length=NULL) 

        if ($str== '' || $start>strlen($str )) return; 
        if (($length!=NULL) && ( $start>0) && ($length> strlen($str)-$start)) return; 

        if (( $length!=NULL) && ($start< 0) && ($length>strlen($str )+$start)) return; 

        if ($length ==  NULL) $length = (strlen($str ) - $start); 
         
        if ($start <  0){ 
                for ($i=(strlen( $str)+$start); $i<(strlen ($str)+$start+$length ); $i++) { 

                        $substr .=  $str[$i]; 
                } 
        } 
        if ($length  > 0){ 
                for ($i= $start; $i<($start+$length ); $i++) { 
                        $substr  .= $str[$i]; 
                } 
        } 
        if ( $length < 0){ 
                for ($i =$start; $i<(strlen( $str)+$length); $i++) { 
                        $substr .= $str[$i ]; 
                } 
        } 
        return $substr; 

//字符串翻转 
function strrev($str) 

        if ($str == '') return 0 ; 
        for ($i=(strlen($str)- 1); $i>=0; $i --){ 
                $rev_str .= $str[$i ]; 
        } 
        return $rev_str; 
}

//字符串比较 
function strcmp($s1,  $s2) 

        if (strlen($s1) <  strlen($s2)) return -1 ; 
        if (strlen($s1) > strlen( $s2)) return 1; 
        for ($i =0; $i<strlen($s1 ); $i++){ 
                if ($s1[ $i] == $s2[$i]){ 
                        continue; 
                }else{ 
                        return false; 
                } 
        } 
        return  0; 
}

//查找字符串 
function  strstr($str, $substr) 

         $m = strlen($str); 
        $n = strlen($substr ); 
        if ($m < $n) return false ; 
        for ($i=0; $i <=($m-$n+1); $i ++){ 
                $sub = substr( $str, $i, $n); 
                if ( strcmp($sub, $substr) ==  0)  return $i; 
        } 
        return false ; 

//字符串替换 
function str_replace($substr , $newsubstr, $str) 

         $m = strlen($str); 
        $n = strlen($substr ); 
        $x = strlen($newsubstr ); 
        if (strchr($str, $substr ) == false) return false; 
        for ( $i=0; $i<=($m- $n+1); $i++){ 
                 $i = strchr($str,  $substr); 
                $str = str_delete ($str, $i, $n); 
                $str = str_insert($str,  $i, $newstr); 
        } 
        return $str ; 
}

//-------------------- 
// 自实现字符串处理函数
//-------------------- 
//插入一段字符串 
function str_insert($str, $i , $substr) 

        for($j=0 ; $j<$i; $j ++){ 
                $startstr .= $str[$j ]; 
        } 
        for ($j=$i; $j <strlen($str); $j ++){ 
                $laststr .= $str[$j ]; 
        } 
        $str = ($startstr . $substr  . $laststr); 
        return $str ; 

//删除一段字符串 
function str_delete($str , $i, $j) 

        for ( $c=0; $c<$i;  $c++){ 
                $startstr .= $str [$c]; 
        } 
        for ($c=( $i+$j); $c<strlen ($str); $c++){ 
                $laststr  .= $str[$c]; 
        } 
         $str = ($startstr . $laststr ); 
        return $str; 

//复制字符串 
function strcpy($s1, $s2 ) 

        if (strlen($s1)==NULL || !isset( $s2)) return; 
        for ($i=0 ; $i<strlen($s1);  $i++){ 
                $s2[] = $s1 [$i]; 
        } 
        return $s2; 

//连接字符串 
function strcat($s1 , $s2) 

        if (!isset($s1) || !isset( $s2)) return; 
        $newstr = $s1 ; 
        for($i=0; $i <count($s); $i ++){ 
                $newstr .= $st[$i ]; 
        } 
        return $newsstr; 

//简单编码函数(与php_decode函数对应) 
function php_encode($str) 

        if ( $str=='' && strlen( $str)>128) return false; 
        for( $i=0; $i<strlen ($str); $i++){ 
                 $c = ord($str[$i ]); 
                if ($c>31 && $c <107) $c += 20 ; 
                if ($c>106 && $c <127) $c -= 75 ; 
                $word = chr($c ); 
                $s .= $word; 
        }  
        return $s;  

//简单解码函数(与php_encode函数对应) 
function php_decode($str) 

        if ( $str=='' && strlen($str )>128) return false; 
        for( $i=0; $i<strlen ($str); $i++){ 
                $c  = ord($word); 
                if ( $c>106 && $c<127 ) $c = $c-20; 
                if ($c>31 && $c< 107) $c = $c+75 ; 
                $word = chr( $c); 
                $s .= $word ; 
        }  
        return $s;  

//简单加密函数(与php_decrypt函数对应) 
function php_encrypt($str) 

         $encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890'; 
         $decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359'; 
        if ( strlen($str) == 0) return  false; 
        for ($i=0;  $i<strlen($str); $i ++){ 
                for ($j=0; $j <strlen($encrypt_key); $j ++){ 
                        if ($str[$i] == $encrypt_key [$j]){ 
                                $enstr .=  $decrypt_key[$j]; 
                                break; 
                        } 
                } 
        } 
        return $enstr; 

//简单解密函数(与php_encrypt函数对应) 
function php_decrypt($str) 

         $encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890'; 
         $decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359'; 
        if ( strlen($str) == 0) return  false; 
        for ($i=0;  $i<strlen($str); $i ++){ 
                for ($j=0; $j <strlen($decrypt_key); $j ++){ 
                        if ($str[$i] == $decrypt_key [$j]){ 
                                $enstr .=  $encrypt_key[$j]; 
                                break; 
                        } 
                } 
        } 
        return $enstr; 

?>

PHP实现各种经典算法的更多相关文章

  1. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  2. Atitit 图像处理30大经典算法attilax总结

    Atitit 图像处理30大经典算法attilax总结 1. 识别模糊图片算法2 2. 相似度识别算法(ahash,phash,dhash)2 3. 分辨率太小图片2 4. 横条薯条广告2 5. 图像 ...

  3. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  4. JS的十大经典算法排序

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...

  5. PHP经典算法

    php经典算法 .冒泡算法,排序算法,由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序 $array = array(a,f,c,b,e,h,j,i,g); functi ...

  6. JAVA经典算法40题及解答

    JAVA经典算法40题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...

  7. (转)白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇

    在我的博客对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载.下载地址为:http://download.cs ...

  8. Java经典算法四十例编程详解+程序实例

    JAVA经典算法40例 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程 ...

  9. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  10. 数据挖掘十大经典算法(5) 最大期望(EM)算法

    在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Lat ...

随机推荐

  1. jdbc实现事务

    //conn需要自己获取,这里我用的时springjdbcTemplate Connection conn = null; PreparedStatement pstm = null; try { c ...

  2. Jenkins离线下载插件,并安装

     在jenkins点击插件进入wiki,然后点击列表下载一个版本的包 安装是,选择高级的tab,下面就有安装: 还有一种方法,就是装VPN,在高级设置VPN地址.

  3. @EmbeddedId和@idClass的区别

    @idClass 使复合主键类成为非嵌入类,使用 @IdClass 批注为实体指定一个复合主键类(通常由两个或更多基元类型或 JDK 对象类型组成).从原有数据库映射时(此时数据库键由多列组成),通常 ...

  4. A.Kaw矩阵代数初步学习笔记 9. Adequacy of Solutions

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  5. Linux 下的常用工具

    Useful Linux Utilities (This article is under constant construction) ssh 相关文章 How To Change OpenSSH ...

  6. POJ 2236 Wireless Network(并查集)

    传送门  Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 24513   Accepted ...

  7. JS, Node.js, npm简介

    序 听过JS,听过Node,也听过Node.js,还听过npm,然而并不是很清楚的知道都代表什么,这两天调接口,然后前端同学很忙,就自己把前端代码拿过来跑了,也趁机了解一下这几个概念,下边做个小的总结 ...

  8. Alpha版本十天冲刺--Day4

    站立式会议 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 解决线程信息传递问题(使用函数回调),Android登录验证接口完善 无 json解析,忘记密码界面验证码获取接口,忘记密码请求 ...

  9. PL/0编译器(java version) – Scanner.java

    1: package compiler; 2:   3: import java.io.BufferedReader; 4: import java.io.FileNotFoundException; ...

  10. Base64复习

    http://www.cnblogs.com/chengxiaohui/articles/3951129.html