插入排序

作者: Rotten_Pencil | 来源:发表于2016-11-30 21:47 被阅读17次

    插入排序的逻辑:

    假设Array A为已经排序好的数组,此时需要从Array B中抽取最靠前的元素插入到Array A中,且需要按顺序插入。

    变形:

    如果只有Array A,而不存在Array B。现在对Array A自己进行插入排序。可以默认认为Array A中的前半段为已排序好的数组,后半段为未排序数组,而元素K为目前正要进行排序的元素。此时前半段可以表示为A[0-(k-1)],后半段为A[(k+1)-(n-1)]n为数组长度

    代码实现:

    <?php
    $a = array(5,2,4,6,1,3);
    $b = array(31,41,59,26,41,48);
    
    function insertionSortAsc($a = array())
    {
        $length = count($a);
    
        for ($j = 1; $j < $length; $j++) {
            $current = $a[$j];
            $i = $j - 1;//从原有序deck中最后一位开始比较,从右向左
    
            while ($i >= 0 && $a[$i] > $current) {
                $a[$i + 1] = $a[$i];//将数字向左移动一位
                $i--;
            }
    
            $a[$i + 1] = $current;
        }
    
        return $a;
    }
    
    function insertionSortDesc($a = array())
    {
        $length = count($a);
    
        for ($j = 1; $j < $length; $j++) {
            $current = $a[$j];
            $i = $j - 1;
    
            while($i >= 0 && $a[$i] < $current) {
                $a[$i + 1] = $a[$i];//将数字向左移动一位
                $i--;
            }
    
            $a[$i + 1] = $current;
        }
    
        return $a;
    }
    
    print_r(insertionSortAsc($a));
    
    print_r(insertionSortDesc($b));
    

    输出结果:

    result_Image.png

    相关文章

      网友评论

        本文标题:插入排序

        本文链接:https://www.haomeiwen.com/subject/chntmttx.html