插入排序的思路是我们默认数组的第一个元素是有序的,从第二个元素开始依次和前面的元素比较,如果前面的元素大,就将前面的元素往后移一位,如果前面的元素小,就把该元素放在前面元素的后面。其实就和我们玩扑克牌差不多的,每次拿牌后,把大牌放后面,小牌放前面。按照这个思路,实现了如下代码:
function insertSort(arr){ if(!Array.isArray(arr)){ return false; //类型判断 } else{ var result=[]; //定义一个新数组 result.push(arr[0]); //默认第一个为有序的 for (var i = 1; i < arr.length; i++) { var lgh = result.length-1; for (var j = lgh; j >= 0; j--) { if(arr[i]
实现了之后看到大佬的文章好像都没定义新的数组,感觉很厉害的样子,于是又优化了自己的代码,优化后的代码如下
function insertSort(arr){ if(!Array.isArray(arr)){ return false; //类型判断 } else{ for (var i = 1; i < arr.length; i++) { var current = arr[i]; var j = i-1; while(current= 0){ arr[j+1] = arr[j]; j--; } arr[j+1] = current; } return arr; } }
算法分析:最好的情况(已经是顺序)时间复杂度为O(n),最坏的情况(逆序),时间复杂度为O(n2).