Min Heap in Kotlin

Posted johnnyzhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Min Heap in Kotlin相关的知识,希望对你有一定的参考价值。

class MinHeap constructor(maxSize_: Int) 
        var size = 0
        var maxSize = maxSize_
        var heapArray: Array<Int>? = null

        companion object 
            const val FRONT = 1
        

        init 
            size = 0
            heapArray = Array(maxSize,0)
            heapArray!![0] = Int.MIN_VALUE
        

        private fun parent(position: Int): Int 
            return position / 2
        

        private fun leftChild(position: Int): Int 
            return (position * 2)
        

        private fun rightChild(position: Int): Int 
            return (position * 2) + 1
        

        private fun isLeaf(position: Int): Boolean 
            if (position >= (size / 2) && position <= size) 
                return true
            
            return false
        

        private fun swap(pos1: Int, pos2: Int) 
            val temp = heapArray!![pos1]
            heapArray!![pos1] = heapArray!![pos2]
            heapArray!![pos2] = temp
        

        private fun minHeapify(pos: Int) 
            if (!isLeaf(pos)) 
                if (heapArray!![pos] > leftChild(pos) || heapArray!![pos] > rightChild(pos)) 
                    if (heapArray!![leftChild(pos)] < heapArray!![rightChild(pos)]) 
                        swap(pos, leftChild(pos))
                        minHeapify(leftChild(pos))
                     else 
                        swap(pos, rightChild(pos))
                        minHeapify(rightChild(pos))
                    
                
            
        

        fun insert(element: Int) 
            if (size >= maxSize) 
                return
            
            heapArray!![++size] = element
            var current = size
            while (heapArray!![current] < heapArray!![parent(current)]) 
                swap(current, parent(current))
                current = parent(current)
            
        

        fun minHeap()
            for (i in (size/2)..1)
                minHeapify(i)
            
        

        /**
         * remove and return the minimum element from the heap
         * */
        fun remove():Int
            val poped = heapArray!![FRONT]
            heapArray!![FRONT] = heapArray!![size--]
            minHeapify(FRONT)
            return poped
        

        fun print() 
            for (i in 1..size / 2) 
                System.out.print(" PARENT: " + heapArray!![i]
                        + ", LEFT CHILD : " + heapArray!![2 * i]
                        + ", RIGHT CHILD :" + heapArray!![2 * i + 1])
                println()
            
        
    

 

以上是关于Min Heap in Kotlin的主要内容,如果未能解决你的问题,请参考以下文章

max_heap与min_heap

max_heap与min_heap

C# min heap implentation

为啥 max Heap 初始化语法与 min Heap 通过 priority_queue 不同?

LF.391.Determine If Array Is Min Heap

从100万数据中找出最大10条的最优算法