AS3.0 实现最小堆

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;
		}
		
		//添加node
		public 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;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值