归并排序


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;
}

posted @ 2016-07-09 11:44  王胜平  阅读(132)  评论(0编辑  收藏  举报