归并排序


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

转载于:https://www.cnblogs.com/rosesBlogs/p/5655550.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值