2015-05-05 3 views
0

Я научился использовать кучи и как упражнение Я пытаюсь написать программу, используя класс кучи, который я создал для сортировки слов. Я прочитал слова из файла и успешно добавил их в кучу. У меня возникли проблемы с выяснением того, как я могу распечатать отсортированный список слов. Из моего понимания того, как работает мини-куча, если я удалю из узла min/root, они всегда будут удалены в отсортированном порядке. Пока я попытался сделать простой цикл, но только половина кучи удаляется.Использование Min-Heap для сортировки слов

Моего Главное Покушение

public static void main(String[] args) { 
    Heap heap = new Heap(); 
    heap = read(heap); 

    for(int i = 0; i < heap.getSize(); i++){ 
     heap.removeMin(); 
    } 
    heap.printHeap(); 
} 

Это функция удалить в моем кучного классе

public Node removeMin(){ 
    Node min = heap.get(0); 
    int index = heap.size() - 1; 
    Node last = heap.remove(index); 
    if(index > 0){ 
     heap.set(0, last); 
     Node root = heap.get(0); 
     int end = heap.size() - 1; 
     index = 0; 
     boolean done = false; 
     while(!done){ 
      if(getLCLoc(index) <= end){ 
       //left exists 
       Node child = getNodeAt(getLCLoc(index)); 
       int childLoc = getLCLoc(index); 
       if(getRCLoc(index) <= end){ 
        //right exists 
        if(getNodeAt(getRCLoc(index)).getData().compareToIgnoreCase(child.getData()) < 0){ 
         child = getNodeAt(getRCLoc(index)); 
         childLoc = getRCLoc(index); 
        } 
       } 
       if(child.getData().compareToIgnoreCase(root.getData()) < 0){ 
        heap.set(index, child); 
        index = childLoc; 
       }else{ 
        done = true; 
       } 
      }else{ 
       //no children 
       done = true; 
      } 
     } 
     heap.set(index, root); 
    } 
    return min; 
} 
+0

Информация не достаточна. См. Http://stackoverflow.com/help/mcve – gknicker

ответ

1

Я предположил бы, что remove() уменьшает размер кучи на 1. Таким образом, для каждой итерации вашего цикла, вы увеличиваете i на 1 и уменьшаете размер кучи на 1. Я бы переключился на цикл while, который работает, а heapsize> 0.

Смежные вопросы