数组直接插入排序
程序员文章站
2022-03-10 21:44:44
...
插入排序:后一项与前一项的比较,把后一项作为比较项临时保存起来,当前一项大于比较项时,前一项往后移,
而比较项继续和前一项进行比较,直到前一项小于比较项时,把比较项插入到当前项的后一项中,覆盖原来的值。
/**
原数组:[1,35,54,3,6,4,7]
拷贝一份原数组:[1,35,54,3,6,4,7] i:后一项(比较项) j:前一项
第一轮
i=1,j=0 1 < 35 [1,35,54,3,6,4,7]
第二轮
i=2,j=1 35 < 54 [1,35,54,3,6,4,7]
第三轮
i=3,j=2 54 > 3 [1,35,54,54,6,4,7]
j=1 35 > 3 [1,35,35,54,6,4,7]
j=0 1 < 3 [1,3,35,54,6,4,7]
第四轮
i=4,j=3 54 > 6 [1,3,35,54,54,4,7]
j=2 35 > 6 [1,3,35,35,54,4,7]
j=1 3 < 6 [1,3,6,35,54,4,7]
第五轮
i=5,j=4 54 > 4 [1,3,6,35,54,54,7]
j=3 35 > 4 [1,3,6,35,35,54,7]
j=2 6 > 4 [1,3,6,6,35,54,7]
j=1 3 < 4 [1,3,4,6,35,54,7]
第六轮
i=6,j=5 54 > 7 [1,3,4,6,35,54,54]
j=4 35 > 7 [1,3,4,6,35,35,54]
j=3 6 < 7 [1,3,4,6,7,35,54]
直接插入排序至少需要array.length-1轮
*/
<script>
// 升序排序
function sort(array) {
var len = array.length,
i, j, tmp, result;
result = array.slice(0);
for (i = 1; i < len; i++) {
tmp = result[i];
j = i - 1;
// result[j] < tmp时,则为降序排序
while (j >= 0 && result[j] > tmp) {
result[j + 1] = result[j];
j--;
}
result[j + 1] = tmp;
}
return result;
}
</script>