题目
传入一串数字进行排序,不可影响第一个和最后一个数字的位置,只对中间部分升序排序,排序完成后以空格连接打印。
示例
示例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]