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

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

2016-11-12 17:03 295 查看

测试代码

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


测试结果



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