Array ( [0] => 16 [1] => 23 [2] => 34 [3] => 100 [4] => 12 [5] => 23 [6] => 31 [7] => 37 [8] => 55 ) 要求升序排列,不能使用内置函数.求算法

解决方案 »

  1.   

    <?php
    /*
     * 冒泡排序
     */
    function bubble_sort($array)
    {
    if(!is_array($array))
    {
    return false;
    }

    $len=count($array);

    for($i=0;$i < $len-1;$i++)
    {
    $flag = false;

    for($j=0;$j < $len-$i-1;$j++)
    {
    if($array[$j] > $array[$j+1])
    {
    $temp=$array[$j];

    $array[$j]=$array[$j+1];

    $array[$j+1]=$temp;

    $flag = true;
    }
    }
    if(! $flag)//本趟排序没有值交换,则提前终止程序
       return $array;
    }
    return $array;
    }
    /* 
     * 希尔排序
     */function shell_sort($array)
    {
    if(!is_array($array))
    {
    return false;
    }

    $len=count($array);

    $d=$len;//随机增量,初始值为数组长度,以不断除2取值

    while($d >1)
    {
    $d=intval($d / 2);//分组间隔,2为n值,n值减少时,移动的趟数和数据增多

    $temp=NULL;

    $j=0;

    for($i=$d;$i < $len;$i+=$d)
    {
    if($array[$i] < $array[$i-$d])
    {
    $temp=$array[$i];

    $j=$i-$d;

    while(($j >=0) && $temp < $array[$j])
    {
    $array[$j+$d]=$array[$j];

    $j = $j - $d;
    }

    $array[$j+$d]=$temp;
    }
    }
    }
    return $array;
    }
    /*
     * 选择排序
     */
    function select_sort($array)
    {
    if(!is_array($array))
    {
    return false;
    }

    $len=count($array);

    for($i=0;$i < $len;$i++)
    {
    $k=$i;

    for($j=$i+1;$j < $len;$j++)
    {
    if($array[$k] > $array[$j])
    {
    $k=$j;
    }
    }
    if($i!=$k){
    $temp = $array[$i];
             $array[$i] = $array[$k];
             $array[$k] = $temp;
    }
    }
    return $array;
    }
    ?>