xuemyi 发表于 2019-3-28 10:56

PHP中4种排序算法

<?php

/**
* PHP排序算法Demo
*/

/**
*
* @Param $data [需要排序的数据(相邻的数据进行比较调换位置)]
* @Return        [排序好的数据]
*/
function bubble_sort($data)
{
        if(!empty($data) && is_array($data))
        {
                $len = count($data);
                for($i=0; $i<$len; $i++)
                {
                        for($k=0; $k<$len-1; $k++)
                        {
                                if($data[$k] > $data[$i])
                                {
                                        $data[$i] = $data[$i] ^ $data[$k];
                                        $data[$k] = $data[$i] ^ $data[$k];
                                        $data[$i] = $data[$i] ^ $data[$k];
                                }
                        }
                }
        }
        return $data;
}

/**
*
* @param $data [需要排序的数据(选择最小的值与第一个调换位置)]
* @return        [排序好的数据]
*/
function select_sort($data)
{
        if(!empty($data) && is_array($data))
        {
                $len = count($data);
                for($i=0; $i<$len; $i++)
                {
                        $t = $i;
                        for($j=$i+1; $j<$len; $j++)
                        {
                                if($data[$t] > $data[$j])
                                {
                                        $t = $j;
                                }
                        }
                        if($t != $i)
                        {
                                $data[$i] = $data[$i] ^ $data[$t];
                                $data[$t] = $data[$i] ^ $data[$t];
                                $data[$i] = $data[$i] ^ $data[$t];
                        }
                }
        }
        return $data;
}

/**
*
* @param $data [需要排序的数据(把第n个数插到前面的有序数组中,以此反复循环直到排序好)]
* @return        [排序好的数据]
*/
function insert_sort($data)
{
        if(!empty($data) && is_array($data))
        {
                $len = count($data);
                for($i=1; $i<$len; $i++)
                {
                        $tmp = $data[$i];
                        for($j=$i-1; $j>=0; $j--)
                        {
                                if($data[$j] > $tmp)
                                {
                                        $data[$j+1] = $data[$j];
                                        $data[$j]         = $tmp;
                                } else {
                                        break;
                                }
                        }
                }
        }
        return $data;
}

/**
*
* @param $data [需要排序的数据(选择一个基准元素,将待排序分成小和打两罐部分,以此类推递归的排序划分两罐部分)]
* @return        [排序好的数据]
*/
function quick_sort($data)
{
        if(!empty($data) && is_array($data))
        {
                $len = count($data);
                if($len <= 1) return $data;

                $base = $data;
                $left_array = array();
                $right_array = array();
                for($i=1; $i<$len; $i++)
                {
                        if($base > $data[$i])
                        {
                                $left_array[] = $data[$i];
                        } else {
                                $right_array[] = $data[$i];
                        }
                }
                if(!empty($left_array)) $left_array = quick_sort($left_array);
                if(!empty($right_array)) $right_array = quick_sort($right_array);

                return array_merge($left_array, array($base), $right_array);
        }
}


/**
* 测试
*/
$data = array(10, 3, 6, 1, 24, 18, 7, 8);
echo '<pre>';

// 冒泡排序
print_r(bubble_sort($data));

// 选择排序
print_r(select_sort($data));

// 插入排序
print_r(insert_sort($data));

// 快速排序
print_r(quick_sort($data));


// 以下是结果
Array
(
    => 1
    => 3
    => 6
    => 7
    => 8
    => 10
    => 18
    => 24
)
Array
(
    => 1
    => 3
    => 6
    => 7
    => 8
    => 10
    => 18
    => 24
)
Array
(
    => 1
    => 3
    => 6
    => 7
    => 8
    => 10
    => 18
    => 24
)
Array
(
    => 1
    => 3
    => 6
    => 7
    => 8
    => 10
    => 18
    => 24
)

?>

spchen 发表于 2019-3-28 11:29

感谢分享
页: [1]
查看完整版本: PHP中4种排序算法