PHP实现常见排序算法



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

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值