var array = []
console.log('== 插入排序 ==\n')
console.log(`插入排序每次排一个数组项,以此方式构建最后的排序数组。假定第一项已经排序了,
接着,它和第二项进行比较,第二项是应该待在原位还是插到第一项之前呢?这样,头两项就已正确排序,
接着和第三项比较(它是该插入到第一、第二还是第三的位置呢?),以此类推。\n`)
function createRandomArray(size) {
var arr = []
for (let i = 0; i < size; i++) {
arr.push(Math.round(Math.random() * size))
}
array = arr
}
function insertionSort() {
var len = array.length, j, temp
for (let i = 1; i < len; i++) {
j = i
temp = array[i]
console.log('外层--',i)
for( j=i; j>0; j--){
if(array[j - 1]>temp){
array[j]=array[j - 1]
}else{
break
}
}
array[j] = temp
}
}
function swap(ind1, ind2) {
var aux = array[ind1]
array[ind1] = array[ind2]
array[ind2] = aux
}
createRandomArray(8)
console.log('排序前:',array)
console.time('耗时')
insertionSort()
console.timeEnd('耗时')
console.log('排序后:',array)
console.log(`\n 分析:
经过一轮外循环后最大数9以排至数组尾部,后续不用再对9进行比较,内层循环范围缩小至0-(n-1-i)\n`)