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