您的位置:首页 > 编程语言 > PHP开发

php基础排序

2016-03-25 10:05 645 查看
/**
* 插入
*/
function charu($arr) {
$count = count ( $arr );
for($i = 1; $i < $count; $i ++) { // 以数组第一个数字为基准
$temp = $arr [$i]; // 控制循环并进行交换
for($j = $i - 1; $j >= 0; $j --) {
if ($temp < $arr [$j]) {
$arr [$j + 1] = $arr [$j];
$arr [$j] = $temp;
} else {
break;
}
}
}
return $arr;
}

/**
* 选择
*/
function xuanze($arr) {
$count = count ( $arr );
for($i = 0; $i < $count - 1; $i ++) {
$min = $i;
for($j = $i + 1; $j < $count; $j ++) {
if ($arr [$min] > $arr [$j]) {
$min = $j;
}
}
if ($i != $min) {
$temp = 0;
$temp = $arr [$min];
$arr [$min] = $arr [$i];
$arr [$i] = $temp;
}
}
return $arr;
}

/**
* 冒泡
*/
function maopao($arr) {
$count = count ( $arr );
for($i = 0; $i < $count - 1; $i ++) {
for($j = $i + 1; $j < $count; $j ++) {
if ($arr [$i] > $arr [$j]) {
$temp = 0;
$temp = $arr [$j];
$arr [$j] = $arr [$i];
$arr [$i] = $temp;
}
}
}
return $arr;
}

/**
* 快速
*/
function kuaisu($arr) {
$count = count ( $arr );
if ($count <= 1) {
return $arr;
}
$temp = $arr [0];
$left = $right = [ ];
for($i = 1; $i < $count; $i ++) {
if ($temp > $arr [$i]) {
$left [] = $arr [$i];
} else {
$right [] = $arr [$i];
}
}
$left = kuaisu ( $left );
$right = kuaisu ( $right );
return array_merge ( $left, array ($temp), $right );
}

/**
* 木桶
*/
function mutong($arr) {
$min = min($arr);
$max = max($arr);
$count = count($arr);
$buffer = array_fill ($min, $max - $min + 1, 0);
for($i = 0; $i < $count - 1; $i ++) {
$buffer [$arr[$i]] ++;
} // 根据统计桶内的次数输出桶内的数字
for($i = $min; $i < $max + 1; $i ++) {
for($j = 0; $j < $buffer[$i]; $j ++) {
$result[] = $i;
}
}
return $result;
}
/**
* 加锁写文件
*/
function write_file($filepath,$msg=''){
$file = fopen($filepath,'a+');//w+表覆盖;a+表叠加
if(flock($file,LOCK_EX)){
fwrite($file,$msg);
flock($file,LOCK_UN);
}else{
fclose($file);//关闭,防止锁死
write_file();//递归回调--重新开始写
}
fclose($file);
}
/**
* 约瑟夫环
*/
function ysf($n,$m){
$y = 0;
for($i=0;$i<=$n;$i++){
$y = ($y + $m)%$i;
}
return $y + 1;
}

// 1,1,2,3,5,8,13,...
// 第n个数是多少
function CoolAdd($n){
if(in_array($n,array(1,2))){
return 1;
}
$tmp = array();
$tmp[1]=1;
$tmp[2]=1;
for($i=3;$i<=$n;$i++){
$tmp[$i]=$tmp[$i-1]+$tmp[$i-2];
}
return $tmp;
}
/**
* 二分查找:查找一个值在数组中的位置
* @$arr:操作的数组,前提是按顺序排列
* @$val:查找的值
* @$low:查找的起始位置,默认从数组的第一个数找起
* @$hight:查找的结束位置
*/
function erfen($arr,$fields,$start=0,$end){
while ($start <= $end){
$center = ceil($start + ($end - $start)/2);
if($arr[$center] > $fields){
return true;
}elseif($arr[$center] > $fields){//如果在前面
$end = $center - 1;//把end设置为$mid-1
}else{
$start = $center + 1;//把$start 设置为中间键值加1
}
}
return false;
}
/**
* @uses 遍历文件夹
*/
function read_all_dir ( $dir )
{
$result = array();
$handle = opendir($dir);
if ( $handle )
{
while ( ( $file = readdir ( $handle ) ) !== false )
{
if ( $file != '.' && $file != '..')
{
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if ( is_dir ( $cur_path ) )
{
$result['dir'][$cur_path] = read_all_dir ( $cur_path );
}
else
{
$result['file'][] = $cur_path;
}
}
}
closedir($handle);
}
return $result;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: