Насыпьте и просочите вниз для максимальной кучи

#tree #heap #heapsort

Вопрос:

Мне нужно создать кучу для класса дерева кучи в c . Я проверил наличие какой-либо ссылки, но во всех ссылках были переданы аргументы. Наш код выглядит так:

 template lt;typename Comparablegt; vectorlt;Comparablegt; heapsort()  

Мы должны создать функцию heapsort без каких-либо аргументов. Я попытался сделать следующее:

 template lt;typename Comparablegt;  void heapsort(vectorlt;Comparablegt; amp;array){   for (int i = (array.size()) / 2 - 1; i gt;= 0; i--)  {  percolateDown(i);  }  for (int j = array.size() - 1; j gt; 0; j--)  {   int temp = array[0];  array[0] = array[j];  array[j] = temp;  percolateDown(0);  } }  

Кроме того, для метода перколяции я получил много ссылок на метод перколяции, но у каждого из них было 3 аргумента, но у моей программы должен быть только 1 аргумент.

ниже приведен мой код для просачивания вниз:

 template lt;typename Comparablegt;  void BinaryHeaplt;Comparablegt;::percolateDown(int hole) {  int child;  Comparable tmp = std::move(array[hole]);   for (; hole * 2 lt;= currentSize; hole = child)  {  child = hole * 2;  // child: left child  // child   1: right child  if (child != currentSize amp;amp; array[child   1] lt; array[child])    child;  if (array[child] lt; tmp)  array[hole] = std::move(array[child]);  else  break;  }  array[hole] = std::move(tmp); }  

Ниже приведена моя ошибка в связи с вышеизложенным:

 BinaryHeap.cpp: In function 'void heapsort(std::vectorlt;Comparablegt;amp;)': BinaryHeap.cpp:143:9: error: there are no arguments to 'percolateDown'  that depend on a template parameter, so a declaration  of 'percolateDown' must be available [-fpermissive]    143 | percolateDown(i);  | ^~~~~~~~~~~~~  ------------------------------------------------------  BinaryHeap.cpp:143:9: note: (if you use '-fpermissive', G   will accept   your code, but allowing the use of an   undeclared name is deprecated) BinaryHeap.cpp:151:9: error: there are no arguments to 'percolateDown'  that depend on a template parameter, so a declaration  of 'percolateDown' must be available [-fpermissive]    151 | percolateDown(0);  

Это задание по программированию; любые советы или подсказки по этому вопросу были бы полезны.

Комментарии:

1. «Я должен создать кучу для класса дерева кучи» : ваш код показывает автономную heapsort функцию, в то время percolateDown как является методом BinaryHeap класса. Если вам действительно нужно написать его для класса дерева кучи , то heapsort это должен быть метод, а не функция, и percolateDown его следует вызывать как метод, а не как автономную функцию.