每年总是要隔三差五的看数据结构,每次总是觉得自己很多东西没有学好,唉。今天贴刚使用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 ); } ?>