OSDN Git Service

デバッグ
authorkomutan <t_komuta@nifty.com>
Sun, 20 Jul 2014 17:58:47 +0000 (02:58 +0900)
committerkomutan <t_komuta@nifty.com>
Sun, 20 Jul 2014 17:58:47 +0000 (02:58 +0900)
src/LibNMeCab/Core/PriorityQueue.cs

index 9c26bf3..865b73b 100644 (file)
@@ -20,7 +20,7 @@ namespace NMeCab.Core
         }\r
 \r
 #if BinaryHeapPriorityQueue\r
-        \r
+\r
         public void Push(T item)\r
         {\r
             int currentPos = this.list.Count;\r
@@ -52,48 +52,35 @@ namespace NMeCab.Core
         private void DeleteTop()\r
         {\r
             int tailPos = this.list.Count - 1;\r
-            this.list[0] = this.list[tailPos];\r
+            if (tailPos == -1) return;\r
+            T current = this.list[tailPos];\r
             this.list.RemoveAt(tailPos);\r
             if (tailPos == 0) return;\r
             tailPos--;\r
-            \r
+\r
             int currentPos = 0;\r
-            T current = this.list[0];\r
             while (true)\r
             {\r
-                int leftPos = currentPos * 2 + 1;\r
-                if (leftPos > tailPos) break;\r
-                int rightPos = leftPos + 1;\r
+                int chiledPos = currentPos * 2 + 1;\r
+                if (chiledPos > tailPos) break;\r
+                T chiled = this.list[chiledPos];\r
 \r
-                int chiledPos;\r
-                T chiled;\r
-                if (rightPos > tailPos)\r
+                int wrkPos = chiledPos + 1;\r
+                if (wrkPos <= tailPos)\r
                 {\r
-                    chiledPos = leftPos;\r
-                    chiled = this.list[chiledPos];\r
-                }\r
-                else\r
-                {\r
-                    T left = this.list[leftPos];\r
-                    T right = this.list[rightPos];\r
-                    if (left.CompareTo(right) < 0)\r
-                    {\r
-                        chiledPos = leftPos;\r
-                        chiled = left;\r
-                    }\r
-                    else\r
+                    T wrk = this.list[wrkPos];\r
+                    if (chiled.CompareTo(wrk) > 0)\r
                     {\r
-                        chiledPos = rightPos;\r
-                        chiled = right;\r
+                        chiledPos = wrkPos;\r
+                        chiled = wrk;\r
                     }\r
                 }\r
 \r
                 if (current.CompareTo(chiled) < 0) break;\r
                 this.list[currentPos] = chiled;\r
-                this.list[chiledPos] = current;\r
-                current = chiled;\r
                 currentPos = chiledPos;\r
             }\r
+            this.list[currentPos] = current;\r
         }\r
 \r
 #else\r