需要注意:①已知有序,但不知道是升序还是降序;
②数组会不会是一个空数组;
思路:1.首先判断是不是一个空数组;如果是空,直接加入数字(arr.push());
2.如果不是空数组就要判断数组是升序还是降序;
3.如果是升序的数组,进行判断并执行:
数字要是比数组最大的大,就放在最后面(arr.push());
其他情况进行循环遍历,找合适位置进行 splice插入;
4.如果是降序数组,则可以先把数组进行反转成升序数组,按照升序数组的数字插入过程进行执行,最后再把结果反转回来,这样优化了整个过程。
5.最后封装函数,整个代码执行过程如下:
<script>
function insert(arr,num){
// 先判断是不是空数组
if(arr.length===0){
arr.push(num)
return //结束函数 返回值
}
// 如果不是空数组,执行到这里就要判断原数组是升序还是降序;
// 只要比较第一个数与最后一个数的大小关系就可以判断升降;
//指定一个规则:false=>降序;true=>升序;
var dir = arr[0]>arr[arr.length-1]?false:true
if(!dir) arr.reverse() // 如果原数组是升序,就略过这个判断,直接进行下面的数字插入;
// 此时无论原数组怎样,执行到这一步都是升序;则
if(num>=arr[arr.length-1]){
arr.push(num)
}else{
for(i=0;i<arr.length;i++){
if(num<=arr[i]){
arr.splice(i,0,num)
break
}
}
}
// 执行到这里 插入已经进行完毕
// 最后判断如果原数组是降序,经历了上面的执行变成了升序;则要反转回来;
if(!dir) arr.reverse()
}
</script>