只有数组长度大于1000的时候,插入排序的优势才会出来,而在1000以下,先执行插入后执行排序,排序所用的时间要么是0毫秒,要么事1毫秒,而当把插入和排序函数执行的顺序换一下【数组长度还是在1000以内】插入的执行时间就变成要么是0毫秒,要么是1毫秒了。
总结了说就是在数组很短的时候,谁先执行,谁的耗时就长,而当数组足够大的时候,不管谁先执行,插入的执行时间总是比排序短。
var arr = [];
var arr2 = [];
function generateRandomArray(n,l,r) {
arr = new Array(n);
for(let i = 0; i<n;i++){
arr[i] = Math.floor(Math.random()*(r-l))+l;
}
return arr;
}
function fntime(fn) {
let start = new Date().getTime(); // 开始时间
fn()
let end = new Date().getTime(); // 结束时间
console.log(end - start+"毫秒!");
}
function copyArray(arr) {
for(let i = 0; i<arr.length;i++){
arr2.push(arr[i]);
}
}
function main() {
arr = generateRandomArray(100,0,100000);
copyArray(arr)
fntime(insertSort)
console.log("----------------------------------------------------------------------")
fntime(selectionSort)
}
//var arr = ["f","u","c","K","o","x"];
function insertSort() {
for(let i = 1; i < arr.length; i++){
let e =arr[i];
let j = 0;
for(j = i; j > 0; j--){
if(arr[j-1] > e){
arr[j] = arr[j-1];
}else {
break
}
}
arr[j] = e;
}
console.log("我是插入排序"+arr)
}
function selectionSort() {
for(let i = 0; i < arr2.length; i++){
let minIndex = i;
for(let j = i+1; j < arr2.length; j++){
if(arr2[j] < arr2[minIndex]){
[arr2[j],arr2[minIndex]] = [arr2[minIndex],arr2[j]];
}
}
}
console.log("我是选择排序"+arr2)
}
main()