四种简单的排序算法的php实现

  无聊,用php写几个排序算法,算法介绍请移步这里,这里使用php实现了几个简单的,如下

//选择排序
function selection_sort($arr){
    $len = count($arr);
    if($len <= 1) return $arr;
    
    for($i=0; $i<$len; $i++){
        $min = $arr[$i];
        $pos = $i;
        for($j=$i+1; $j<$len; $j++){
            if($min > $arr[$j]){
                $min = $arr[$j];
                $pos = $j;
            }
        }
        if($pos != $i){
            $arr[$pos] = $arr[$i];
            $arr[$i] = $min;
        }
    }
    return $arr;
}

//插入排序
function insertion_sort($arr){
    $len = count($arr);
    if($len <= 1) return $arr;
    
    for($i=1; $i<$len; $i++){
        $insertion = $arr[$i];
        $j = $i - 1;
        while($insertion < $arr[$j]){
            $arr[$j+1] = $arr[$j];
            $j--;
            if($j < 0)break;
        }
        if($j == $i-1) continue;
        $arr[$j+1] = $insertion;
    }
    return $arr;
}

//冒泡排序
function bubble_sort($arr){
    $len = count($arr);
    if($len <= 1) return $arr;
    
    for($i=0; $i<$len; $i++){
        for($j=$len-1; $j>$i;  $j--){
            if($arr[$j] < $arr[$j-1]){
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $tmp;
            }
        }
    }
    return $arr;
}

//快速排序
function quick_sort($arr){
    $len = count($arr);
    if($len <= 1) return $arr;
    
    $base = current($arr);
    $left_arr = array();
    $right_arr = array();
    
    for($i=1; $i<$len; $i++){
        if($arr[$i] <= $base) $left_arr[] = $arr[$i];    
        if($arr[$i] > $base) $right_arr[] = $arr[$i];    
    }
    
    $left_arr = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);
    return array_merge($left_arr, array($base), $right_arr);
    
}

//test
$arr = array(4, 3, 2, 1, 6);
$arr_sorted = quick_sort($arr);
print_r($arr_sorted);

 

posted @ 2015-09-06 23:02  可酷可乐  阅读(972)  评论(0编辑  收藏  举报