您的位置:首页 > Web前端 > JavaScript

[JS]链表划分给定中间值,小的在左边,大的在右边并保持原排序

2017-10-06 00:00 344 查看

测试代码

<script type="text/javascript"> //产生测试数据 var head = new sNode(0); for(var i=0;i<20;i++){ var p = new sNode(randInt(100)); p.pNext = head.pNext; head.pNext = p; } print(head); for(var i=1;i<6;i++){ write("当前的中间值是: "+parseInt(50/i)); writeEnd(); head = partition(head,parseInt(50/i)); print(head); } //一次partition function partition(head,pivotKey){ var pLeftHead = new sNode(0); var pRightHead = new sNode(0); var p = head.pNext; var left = pLeftHead; var right = pRightHead; while(p!=null){ if(p.value < pivotKey){ left.pNext = p; left = p; }else{ right.pNext = p; right = p; } p = p.pNext; } right.pNext = null; left.pNext = pRightHead.pNext; head.pNext = pLeftHead.pNext; return head; } </script>

辅助函数

//定义sNode结点
function sNode(v){
this.value = v;
this.pNext = null;
}

//遍历链表数据
function print(head){
write("输出链表数据...");
writeEnd();
var p = head.pNext;
while(p!=null){
write(p.value);
p = p.pNext;
}
writeEnd();
write("end 输出链表数据...");
writeEnd();
}

//产生整型随机数
function randInt(max){
return parseInt(Math.random()*max);
}

//对默认的输出进行封装为write函数
function write(str){
console.log(str);
document.write(str+" ");
}

//输出换行
function writeEnd(){
document.write("<br>");
}

测试结果



当不断地选取中间值,就有快速排序的感觉了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐