2010-12-01 2 views
0

Ниже приведен мой код, который не создает пузырьков по более крупному значению. Может ли кто-нибудь помочь. Проблема несколько в count ++.Вставляя узлы в кучу, как использовать пузырь?

#include<iostream> 
using namespace std; 

class heap{ 
public: 
    int count; 
    heap(int c) 
    { 
     count=c; 
    } 
    int Arr[10]; 
    void insert(int num); 
    void deletemax(); 
    void print(); 
}; 

void heap::insert(int num){ 
    if(count==10){ 
     cout<<"Heap full\n"; 
     exit(1); 
    } 
    else{ 
     Arr[count]=num; 
     count++; //The real problem arises here that the compiler adds 1 to count and when the code moves ahead it sets position var to count++ value and tries to compare a value at Arr[POS] with its parent whereas there is no value at this place set uptill. 
    } 
    int POS=count; 
    while(Arr[POS]>Arr[(POS-1)/2]){ 
     int temp; 
     temp=Arr[POS]; 
     Arr[(POS-1)/2]=temp; 
     POS=(POS-1)/2; 
    } 
} 

void heap::print(){ 
    for(int i=0; i<10; i++){ 
     cout<<Arr[i]<<endl; 
    } 
} 

int main(){ 
    heap h(0); 
    int a; 
    int b=0; 
    while(b<10){ 
     cout<<"Insert node in heap\n"; 
     cin>>a; 
     h.insert(a); 
     b++; 
    } 
    h.print(); 
    return 0; 
} 
+1

Пожалуйста, исправьте форматирование с выдвинутым вверх – 2010-12-01 17:27:49

+3

И пока вы на нем, попробуйте задать вопрос. – 2010-12-01 17:28:17

ответ

1

Я согласен, вот где ваша проблема.

1

Есть много проблем с кодом вы публикуемым, некоторые из которых включает в себя:

  1. Что касается вашего конкретного вопроса, я бы предположил, что вам нужно изменить строку в куче :: вставить() в " int POS = count-1; " для правильного запуска итерации с обратной стороны массива.
  2. Вам нужно рассмотреть случай добавления элемента в пустой массив и что тогда происходит в вашем коде сортировки.
  3. Ваш конструктор позволяет создать кучу, которая переполнит массив фиксированного размера, например куча (1000). Кроме того, член Arr не инициализирован, что означает, что он имеет неопределенные данные для любого значения, но куча (0). В этом случае ваш конструктор не должен принимать какие-либо параметры, и счет должен быть просто инициализирован равным 0.
  4. Целью кода является сбивание с толку. Является ли это кучей, отсортированным массивом, попыткой аппроксимировать кучу массивом, ни один из вышеперечисленных? Если вы просто пытаетесь реализовать отсортированный массив с фиксированным размером, я считаю, что ваш код сортировки в insert() не будет работать (например, рассмотрите возможность добавления 100 в кучу, содержащую [1,2,3]).

Существуют и другие, более простые вещи, неправильные (например, использование каких-либо контейнеров STL, открытый член класса, передача неконстантных параметров, «использование std» и т. Д.), Но я предполагаю, что вы просто экспериментируют/играют здесь.

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