文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>php排序算法总结

php排序算法总结

时间:2010-11-23  来源:yangqing_fly

<?php
class Sort {
    //构造函数
    public function __construct() {
    }
    
    //插入排序 3k次赋值
    public function InsertSort($arr) {
        for($i = 1; $i < count ( $arr ); $i ++) {
            for($j = $i; $j > 0; $j --) {
                if ($arr [$j] < $arr [$j - 1]) {
                    $tmp = $arr [$j - 1];
                    $arr [$j - 1] = $arr [$j];
                    $arr [$j] = $tmp;
                }
            }
        }
        return $arr;
    }
    
    //改进的插入排序 K+2次赋值
    public function InsertImprovedSort($arr) {
        for($i = 1; $i < count ( $arr ); $i ++) {
            $tmp = $arr [$i];
            $j = $i - 1;
            while ( $arr [$j] > $tmp ) {
                $arr [$j + 1] = $arr [$j];
                $arr [$j] = $tmp;
                $j --;
            }
        }
        return $arr;
    }
    
    //二分插入排序
    public function InsertBinarySort($arr) {
        for($i = 1; $i < count ( $arr ); $i ++) {
            $tmp = $arr [$i];
            $left = 0;
            $right = $i - 1;
            while ( $left <= $right ) {
                $middle = floor ( ($left + $right) / 2 );
                if ($arr [$middle] < $tmp) {
                    $left = $middle + 1;
                } else {
                    $right = $middle - 1;
                }
            }
            for($j = $i - 1; $j >= $left; $j --) {
                $arr [$j + 1] = $arr [$j];
            }
            $arr [$left] = $tmp;
        }
        return $arr;
    }
    
    //冒泡排序
    public function BubbleSort($arr) {
        for($i = 1; $i < count ( $arr ); $i ++) {
            for($j = count ( $arr ) - 1; $j > $i; $j --) {
                if ($arr [$j] < $arr [$j - 1]) {
                    $tmp = $arr [$j - 1];
                    $arr [$j - 1] = $arr [$j];
                    $arr [$j] = $tmp;
                }
            }
        }
        return $arr;
    }
    
    //改进的冒泡排序
    public function BubbleImprovedSort($arr) {
        for($i = 1; $i < count ( $arr ); $i ++) {
            $noswap = true;
            for($j = count ( $arr ) - 1; $j > $i; $j --) {
                if ($arr [$j] < $arr [$j - 1]) {
                    $tmp = $arr [$j - 1];
                    $arr [$j - 1] = $arr [$j];
                    $arr [$j] = $tmp;
                    $noswap = false;
                }
            }
            if ($noswap) {
                return $arr;
            }
        }
    }
    
    //选择排序
    public function SelectSort($arr) {
        for($i = 0; $i < count ( $arr ) - 1; $i ++) {
            $min = $i;
            for($j = $i + 1; $j < count ( $arr ); $j ++) {
                if ($arr [$min] > $arr [$j]) {
                    $min = $j;
                }
            }
            $tmp = $arr [$min];
            $arr [$min] = $arr [$i];
            $arr [$i] = $tmp;
        }
        return $arr;
    }
    
    //shell排序...借助直接插入排序算法
    public function toggle_sort(&$a) {
        $i = 0;
        $lastindex = count ( $a ) - 1;
        while ( $i < $lastindex ) {
            if ($a [$i] <= $a [$i + 1]) {
                $i ++;
            } else {
                $tmp = $a [$i];
                $a [$i] = $a [$i + 1];
                $a [$i + 1] = $tmp;
                if ($i) {
                    $i --;
                }
            }
        }
    }
   
    //桶排序
    public function TongSort($arr) {
        $arrTemp = array (); //临时数组
        $len = count ( $arr ); //数组元素长度
        //将数组赋值到临时数组中
        for($i = 0; $i < $len; $i ++) {
            $arrTemp [$i] = $arr [$i];
        }
        //初始化数组各元素个数为0
        for($i = 0; $i < $len; $i ++) {
            $cnt [$i] = 0;
        }
        //统计数组个元素的个数
        for($i = 0; $i < $len; $i ++) {
            $cnt [$arrTemp [$i]] ++;
        }
        //计算数组元素各元素应该呆的位置
        for($i = 1; $i < $len; $i ++) {
            $location [$i] = $location [$i - 1] + $cnt [$i];
        }
        //还原数组
        for($i = 0; $i < $len; $i ++) {
            $arr [-- $location [$arrTemp [$i]]] = $arrTemp [$i];
        }
        return $arr;
    }
    
    //获取指点文件夹下所有子文件及其文件
    public function getdirpath($path) {
        $data = array ();
        if (is_dir ( $path )) {
            if (($dh = opendir ( $path )) != false) {
                while ( ($file = readdir ( $dh )) !== false ) {
                    if ($file != "." || $file != "..") {
                        $data [] = $file;
                    }
                }
                closedir ( $dh );
            }
        }
    }
}
$arr = array ('7654', '6768', '9297', '7657', '6715', '9879', '6546', '6543', '9871' );
$sort = new Sort ();
$sort->BaseSort ( $arr );

?>
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载