常见排序

2018-06-14  本文已影响19人  liamu

时间复杂度是指执行算法所需要的计算工作量
而空间复杂度是指执行这个算法所需要的内存空间。

分类
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是指在排序期间全部对象太多,不能同时存放在内存中,必须根据排序过程的要求,不断在内,外存间移动的排序。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等

image

冒泡排序

$nums = [3,44,2,9,12,56,89];

function bubblesort(array $arr = []){
    $counts = count($arr);
    if ($counts < 2) {
        return $arr;
    }
    for ($i=0; $i < $counts-1; $i++) { 
        for ($j=0; $j < $counts-$i-1; $j++) { 
            if ($arr[$j] > $arr[$j+1]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
            }
        }
    }
    return $arr;
}

选择排序

$nums = [3,44,2,9,12,56,89];

function selectSort(array $numbers = array())
{
    $count = count( $numbers );
    if( $count <= 1 ) return $numbers;
    for($i = 0; $i < $count-1; $i ++)
    {
        $min = $i;
        for( $j = $i+1; $j < $count; $j ++)
        {
            if( $numbers[$min] > $numbers[$j] )
            {
                $min = $j;
            }
        }
        if( $min != $i )
        {
            $temp = $numbers[$min];
            $numbers[$min] = $numbers[$i];
            $numbers[$i] = $temp;
        }
    }
    return $numbers;
}

插入排序

function insertionSort(array $numbers = array())
{
    $count = count( $numbers );
    if( $count <= 1 ) return $numbers;
    for($i = 1; $i < $count; $i ++)
    {
        $temp = $numbers[$i];
        for($j = $i-1; $j >= 0 && $numbers[$j] > $temp; $j --)
        {
            $numbers[$j+1] = $numbers[$j];
        }
        $numbers[$j+1] = $temp;
    }
    return $numbers;
}

快速排序

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。


快速排序
function quickSort(array $arr = []){
    $counts = count($arr);
    if ($counts < 2) {
        return $arr;
    }
    $mid_value = $arr[0];
    $left_arr = $right_arr = [];
    for ($i=1; $i < $counts; $i++) { 
        if ( $mid_value > $arr[$i] ) {
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }
    return array_merge(quickSort($left_arr),(array)$mid_value,quickSort($right_arr));
}
上一篇 下一篇

猜你喜欢

热点阅读