Member 13736653 Ответов: 1

Использование алгоритма сортировки кучи


Одним из основных применений куч является сортировка кучи. Она состоит из 2-х этапов

(1) построить кучу и

(2) сортированный массив создается путем многократного удаления самого большого элемента (куча обновляется после каждого удаления для поддержания кучи).


Input
	N
	x1 x2 ……… xn
где,
N is the total numbers to be sorted
 xi    input numbers


Выход

У1 У2 ......... уя

где сортируется массив y


Функция сортировки кучи уже доступна вам

Вам нужно, чтобы завершить кучи построения и функции heapify



Вам нужно закодировать следующие функции



// function creates and build a heap using minHeapify

void createHeap(struct MinHeap* minHeap){

// Single Node is a heap   

    			// Start from bottom most and rightmost internal node and heapify all internal nodes in bottom up way

 

	}




// heapify a min Heap.

void heapify(struct MinHeap* minHeap, int idx){

// idx is the index of the node you want to heapify

}


Что я уже пробовал:

void createHeap(struct MinHeap* minHeap)
{
    int i,numelems;
   // n=heap[0]; //no. of elements
    for(i=numelems/2;i>=1;i--)
        down_adjust(minHeap,i);
}

void heapify(int*a , int len)
{
 int item,i,j,k;
 
 for(k=1 ; k<len ; k++)
 {
  item = a[k];
  i = k;
  j = (i-1)/2;
 
  while( (i>0) && (item>a[j]) )
  {
   a[i] = a[j];
   i = j;
   j = (i-1)/2;
  }
  a[i] = item;
 }
}

OriginalGriff

И что же?
В чем же проблема?
Где ты застрял?
Какая помощь вам нужна?

Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.

1 Ответов

Рейтинг:
1

Rick York

Я не смотрел слишком пристально, но увидел одну очевидную проблему с кодом, который вы опубликовали. В createHeap цикл for начинается с numelems/2, но переменная никогда не устанавливается в какое-либо значение. Это не очень хорошо сработает. Я подозреваю, что вы должны передать numelems функции в качестве параметра.