快速排序,归并排序
来源:互联网 发布:数据库%号 编辑:程序博客网 时间:2024/05/18 15:27
- 快速排序
- <?php
function quicksort($str){
if(count($str)<=1) return $str;//如果个数不大于一,直接返回
$key=$str[0];//取一个值,稍后用来比较;
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($str);$i++){//比$key大的放在右边,小的放在左边;
if($str[$i]<=$key)
$left_arr[]=$str[$i];
else
$right_arr[]=$str[$i];
}
$left_arr=quicksort($left_arr);//进行递归;
$right_arr=quicksort($right_arr);
return array_merge($left_arr,array($key),$right_arr);//将左中右的值合并成一个数组;
}//以下是测试
$str=array(5,3,8,2,5,9,7,2,1,4,0);
print_r(quicksort($str));
?> - 归并排序(1)
- <?php
- /**
- * 归并排序
- */
- function guiSort( $arr )
- {
- // 计算数组里的个数, 如果只有一个成员, 直接返回
- $count = count( $arr );
- if( $count <= 1 )
- {
- return $arr;
- }
- //如果成员很多, 那么对左边 归并, 对右边归并
- $mid = floor( $count / 2 );
- $left = guiSort( array_slice( $arr, 0, $mid ) );
- $right = guiSort( array_slice( $arr, $mid ) );
- // 左半数组的大小, 右半数组的大小
- $leftLen = count( $left );
- $rightLen = count( $right );
- //返回值保存的变量
- $ret = array();
- $li = 0;
- $ri = 0;
- while( 1 )
- {
- // 如果左边全合并了, 则退出循环
- if( $li >= $leftLen )
- {
- $flag = 'left';
- break;
- }
- // 如果右边全合并了, 则退出循环
- if( $ri >= $rightLen )
- {
- $flag = 'right';
- break;
- }
- //如果左边的数小, 则左边加入返回数组
- if( $left[ $li ] <= $right[ $ri ] )
- {
- $ret[] = $left[ $li ];
- $li ++;
- } else
- {
- $ret[] = $right[ $ri ];
- $ri ++;
- }
- }
- if( $flag == 'left' )
- {
- //如果首先合并完的是左边, 则把右数组剩余的都加到返回数组
- $ret = array_merge( $ret, array_slice( $right, $ri ) );
- } elseif( $flag == 'right' )
- {
- $ret = array_merge( $ret, array_slice( $left, $li ));
- }
- return $ret;
- }
- // 测试代码
- $arr = range( 1, 100 );
- shuffle( $arr );
- var_dump( $arr );
- $res = guiSort( $arr );
- var_dump( $res );
- 归并排序(2)
$lista = array(3,8,4);$listb = array(5,6,2); print_r(mergeSort($lista, $listb)); function mergeSort($la,$lb) { //sort two sub-lists sort($la); sort($lb); $final = array(); //keep looping while the two lists both have elements while($la && $lb){ //compare the first two values,choose the smaller one and insert to 'final' if($la[0]<=$lb[0]){ $final[] = array_shift($la); }else{ $final[] = array_shift($lb); } } return array_merge($final,$la,$lb);} #######output##########Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 8 )
0 0
- 快速排序&归并排序
- 快速排序,归并排序
- 快速排序、归并排序
- 快速排序&&归并排序
- 归并排序+快速排序
- 快速排序 归并排序
- 快速排序&归并排序
- 快速排序 && 归并排序
- 归并排序 快速排序
- 快速排序&归并排序
- 快速排序 && 归并排序
- 快速排序,归并排序
- 快速排序和归并排序
- 归并排序和快速排序
- 归并排序和快速排序
- 归并排序和快速排序
- 排序之归并、快速排序
- 快速排序与归并排序
- 激励自己!
- 深度探索I/O完成端口
- 《C#入门经典》第六版 学习笔记之第九章 定义类
- uva 1330 - City Game(dp)
- 零Linux基础安装hadoop过程笔记
- 快速排序,归并排序
- Spring源码解读——Spring容器初始化 2
- Android布局——Relative Layout
- Killed when he threw himself on a grenade
- as3 new关键字
- LINUX基础文档总结
- go语言学习1.7
- C# MSchart鼠标悬停时显示数据和checkBox的默认状态
- JSON 字符串 与 java 对象的转换