local MinHeap = class("MinHeap")
function MinHeap:ctor()
self._lbData = {};
self._dataLen = 0;
end
function MinHeap:push(num)
table.insert( self._lbData, num);
self._dataLen = self._dataLen + 1;
self:sortHeap(#self._lbData);
end
function MinHeap:sortHeap(nIndex)
if nIndex <= 1 then
if nIndex ~= 1 then
print("sort error")
end
return true;
end
local fIndex;
if nIndex%2 == 0 then
fIndex = nIndex/2;
else
fIndex = (nIndex-1)/2;
end
if self._lbData[nIndex] < self._lbData[fIndex] then
self._lbData[nIndex],self._lbData[fIndex] = self._lbData[fIndex],self._lbData[nIndex];
return self:sortHeap(fIndex);
else
return true;
end
end
function MinHeap:remove()
local ret = self._lbData[1];
local endNum = table.remove(self._lbData,self._dataLen);
self._dataLen = self._dataLen - 1;
self._lbData[1] = endNum;
self:sortHeap2(1);
return ret;
end
function MinHeap:sortHeap2(nIndex)
local cIndex = nIndex*2;
if cIndex <= self._dataLen and self._lbData[cIndex] < self._lbData[nIndex] then
self._lbData[nIndex],self._lbData[cIndex] = self._lbData[cIndex],self._lbData[nIndex];
self:sortHeap2(cIndex);
cIndex = nIndex*2+1;
if self._lbData[cIndex] < self._lbData[nIndex] then
self._lbData[nIndex],self._lbData[cIndex] = self._lbData[cIndex],self._lbData[nIndex];
self:sortHeap2(cIndex)
end
end
cIndex = nIndex*2+1;
if cIndex <= self._dataLen and self._lbData[cIndex] < self._lbData[nIndex] then
self._lbData[nIndex],self._lbData[cIndex] = self._lbData[cIndex],self._lbData[nIndex];
self:sortHeap2(cIndex);
end
return true;
end