每年总是要隔三差五的看数据结构,每次总是觉得自己很多东西没有学好,唉。今天贴刚使用php实现4的排序算法,另外堆排序和归并排序没有写。
其他数据结构知识使用php的实现参考我以前写的文章:
http://blog.csdn.net/heiyeshuwu/archive/2006/06/10/787426.aspx
插入排序、选择排序、,冒泡排序,时间复杂度貌似都是 O(N2),所以实际意义不大,在实际测试中,我对3000个数组元素进行,这三种排序算法都需要花费80秒左右,而快速排序只需要8秒,差距确是比较大,有兴趣的可以自己测试一下。
<?
// 插入排序(一维数组)
function insert_sort( $arr ){
$count = count ( $arr );
for ( $i = 1 ; $i < $count ; $i ++ ){
$tmp = $arr [ $i ];
$j = $i - 1 ;
while ( $arr [ $j ] > $tmp ){
$arr [ $j + 1 ] = $arr [ $j ];
$arr [ $j ] = $tmp ;
$j -- ;
}
}
return $arr ;
}
// 选择排序(一维数组)
function select_sort( $arr ){
$count = count ( $arr );
for ( $i = 0 ; $i < $count ; $i ++ ){
$k = $i ;
for ( $j = $i + 1 ; $j < $count ; $j ++ ){
if ( $arr [ $k ] > $arr [ $j ])
$k = $j ;
if ( $k != $i ){
$tmp = $arr [ $i ];
$arr [ $i ] = $arr [ $k ];
$arr [ $k ] = $tmp ;
}
}
}
return $arr ;
}
// 冒泡排序(一维数组)
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 );
}
?>
// 插入排序(一维数组)
function insert_sort( $arr ){
$count = count ( $arr );
for ( $i = 1 ; $i < $count ; $i ++ ){
$tmp = $arr [ $i ];
$j = $i - 1 ;
while ( $arr [ $j ] > $tmp ){
$arr [ $j + 1 ] = $arr [ $j ];
$arr [ $j ] = $tmp ;
$j -- ;
}
}
return $arr ;
}
// 选择排序(一维数组)
function select_sort( $arr ){
$count = count ( $arr );
for ( $i = 0 ; $i < $count ; $i ++ ){
$k = $i ;
for ( $j = $i + 1 ; $j < $count ; $j ++ ){
if ( $arr [ $k ] > $arr [ $j ])
$k = $j ;
if ( $k != $i ){
$tmp = $arr [ $i ];
$arr [ $i ] = $arr [ $k ];
$arr [ $k ] = $tmp ;
}
}
}
return $arr ;
}
// 冒泡排序(一维数组)
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 );
}
?>