排序算法

 

常见的排序算法:

冒泡排序 - 对应的代码

function mao_pao(array $data)
{
    if( !is_array($data) ) return $data;
    $count = count($data);
    if( $count < 2 )  return $data;

    for ($i=1; $i < $count; $i++) { 
        for ($j= 0; $j < $count - $i; $j++) { 
            if( $data[$j] > $data[$j+1] ) {
                $item = $data[$j];
                $data[$j] = $data[$j+1];
                $data[$j+1] = $item;
            }
        }
    }
    return $data;
}

注意:还有优化的空间

 

选择排序:

第一次先随便选择一个数,就是在要排序的数组中选择一个元素和数组的其它元素比较。然后比较交换位置得到最小值或者最大值,然后再次在剩下的数组中,选择一个数和数组剩下的元素比较,最后得到第二个最小或最大的元素。

function kuai_su($data)
{
    if( !is_array($data) ) return $data;
    $count = count($data);
    if( $count < 2 )  return $data;

    for ($i=0; $i < $count; $i++) { 
        $minIndex = $i;
        $min = $data[$i];

        for ($j= $i+1; $j < $count ; $j++) { 
            if( $min > $data[$j] ) {
                $min = $data[$j];
                $minIndex = $j;
            }
        }
        
        if( $minIndex != $i ) {
            $data[$minIndex] = $data[$i];
            $data[$i] = $min;
        }
    }
    return $data;
}

 

插入排序:未排序的数据逐个插入到已排序的序列中,从而得到一个有序的序列

function insert_sort($data)
{
    if( !is_array($data) ) return $data;
    $count = count($data);
    if( $count < 2 )  return $data;

    for ($i=1; $i < $count; $i++) { 
        $value = $data[$i];
        $j = $i - 1;

        while ($j >= 0 && $data[$j] > $value ) {
            $item = $data[$j+1];
            $data[$j+1] = $data[$j];
            $data[$j] = $item;
            $j = $j-1;
        }
    }
    return $data;
}

 

归并排序

 

快速排序

function quick_sort($arr)
{
    $count = count($arr);
    if( $count <=1 )
    {
        return $arr;
    }
    $middleValue = $arr[0];

    $leftData = $rightData = [];
    for ($i=1;$i<$count;$i++)
    {
        if( $middleValue <= $arr[$i] ) {
            $leftData[] = $arr[$i];
        } else {
            $rightData[] = $arr[$i];
        }
    }

    $leftData = quick_sort($leftData);
    $rightData = quick_sort($rightData);

    return array_merge($leftData, [$middleValue], $rightData);
}

 

posted @ 2023-10-29 17:01  方达达  阅读(3)  评论(0编辑  收藏  举报