AS3.0 实现最小堆
来源:互联网 发布:关于乔任梁网络暴力 编辑:程序博客网 时间:2024/06/06 03:31
package utils{/* 最小堆 @xiaoyu*/public class BinaryHeap{private var _data:Array;//比较的属性private var _attribute:String;private var _length:int;public function BinaryHeap(attribute:String="f"){_data = new Array();_attribute = attribute;}//添加nodepublic function push(node:Node):void{ _data.push(node); _length = _data.length; var i:int = _data.length - 1; var j:int = (i-1) / 2; while(Min(_data[j],_data[i])&&(j>=0)&&(i!=0)) { var temp:Node = _data[i]; _data[i]=_data[j]; _data[j] = temp; i = j; j = (i-1) / 2; } return ;}public function print():void{for(var i:int = 0;i!=_data.length;i++)trace(" "+_data[i].f+" ");}//删除node操作public function pop():Node{var minNode:Node = _data[0];var temp:Node = _data.pop();_length = _data.length;var i:int = 0;var j:int = 2*i + 1;while(j < _length){ if((j+1<_length)&&(Min(_data[j],_data[j+1])))j = j+1; if(Min(_data[j],temp)) break; _data[i] = _data[j]; i = j; j = 2*i + 1;}_data[i] = temp;return minNode;}//比较两者大小private function Min(preNode:Node,endNode:Node):Boolean{if(endNode[_attribute]<preNode[_attribute])return true;return false;}//返回长度public function Length():int{return _length;}}}