var fs = require("fs");
var writerStream = fs.createWriteStream('output.txt');
for(var length=1;length<=50;length++){
var arr = fillIntArr(length,100);
writerStream.write( '['+ arr.toString() + ']','UTF8');
mergeSort(arr);
writerStream.write('\r\n','UTF8');
writerStream.write('['+ arr.toString() + ']','UTF8');
writerStream.write('\r\n','UTF8');
}
console.log("排序完成!");
writerStream.end();
writerStream.on('error', function(err){
console.log(err.stack);
});
function mergeSort(arr){
for(var seed=1;seed<arr.length;seed*=2){
//console.log("seed:",seed);
for(var key=0;key<arr.length;key+=2*seed){
/*
数组 arr 被分割成 数组长度为seed 的子数组集合;
*/
var arrA=arr.slice(key,key+seed),
arrB=arr.slice(key+seed,key+2*seed);
var arrC=[],cI=0;
arrC = merge(arrA,arrB);
while(cI<arrC.length){
arr[key+cI] = arrC[cI++];
}
/*
console.log("arrA:",arrA);
console.log("arrB:",arrB);
*/
}
}
}
function merge(arrA,arrB){
var aI=0,bI=0,arrC=[];
while(aI<arrA.length && bI < arrB.length){
if(arrA[aI]<arrB[bI]){
arrC.push(arrA[aI++]);
}else{
arrC.push(arrB[bI++]);
}
}
while(aI<arrA.length){
arrC.push(arrA[aI++]);
}
while(bI<arrB.length){
arrC.push(arrB[bI++]);
}
return arrC;
}
function fillIntArr(length,max){
var nums = [];
while(length){
nums.push(~~(Math.random() * max));
length --;
}
return nums;
}