美文网首页
序列排序

序列排序

作者: imjcw | 来源:发表于2018-09-16 20:43 被阅读0次

    题目

    传入一串数字进行排序,不可影响第一个和最后一个数字的位置,只对中间部分升序排序,排序完成后以空格连接打印。

    示例

    示例1:

    给定 5 个数字:7 3 6 2 1,其中,7 和 1 的位置保持不变,中间的三个数字进行升序排序:

    具体见下面的例子

    php sort.php 7 3 6 2 1
    # 7 2 3 6 1
    

    示例2:

    给定 6 个数字:2 3 6 2 4 1,其中,2 和 1 的位置保持不变,中间的四个数字进行升序排序:

    具体见下面的例子

    php sort.php 2 3 6 2 4 1
    # 2 2 3 4 6 1
    

    解析思路

    第一步:为了保持首位和末尾的数字不变,那就先弹出第一位和最后一位

    $first = array_shift($arr);
    $end   = array_pop($arr);
    

    第二步:然后针对弹出后的部分进行升序排序

    sort($arr);
    

    第三步:再在排序后的数组头和尾加入原先的值

    array_unshift($arr, $first);
    array_push($arr, $end);
    

    第四步:用空格连接输出结果

    echo implode(' ', $arr);
    

    完整代码

    这里提供了多个版本的解题方法
    后续可能会增加其它语言的解题方法

    PHP版本

    function mySort($arr)
    {
    
        $first = array_shift($arr);
        $end   = array_pop($arr);
    
        sort($arr);
    
        array_unshift($arr, $first);
        array_push($arr, $end);
    
        return $arr;
    }
    
    mySort([2,3,6,2,4,1]);
    // [2,2,3,4,6,1]
    

    JS版本

    function mySort(arr) {
        let first = arr.shift()
        let end   = arr.pop()
    
        arr.sort()
    
        arr.unshift(first)
        arr.push(end)
    
        return arr
    }
    
    mySort([2,3,6,2,4,1]);
    // [2,2,3,4,6,1]
    

    相关文章

      网友评论

          本文标题:序列排序

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