Алгоритм минимальной кучи и сортировки кучи в c - PullRequest
0 голосов
/ 17 марта 2019

Здравствуйте, я застрял в арифметической операции кодирования.Пожалуйста, помогите мне найти правильные номера .. Я использовал номер: 22,17,49,55,18,69,24,30,20,21.

Для минимизируемой кучи у меня есть: 17,18,24,20,21,69,49,30,55,22

Также для сортировки кучи я имеюполучил: 69,55,49,30,24,22,21,20,18,17

Все вручную.и вывод из кода дает мне неправильный номер, я заимствовал коды и использую его.(спасибо, что поделились, ребята)

Пожалуйста, помогите мне с этими ребятами ... Я изучал Java и только что поступил в колледж и изучаю C, как начинающий ужинать.

#include <stdio.h>

void main()
{ 
  int heap[10], no, i, j, c, root, temp;
  printf("\n Enter no of elements :");
  scanf_s("%d", &no);
  printf("\n Enter the input number : ");
  for (i = 0; i < no; i++)
    scanf_s("%d", &heap[i]);
  ///////////////////////////////////////////////////////////////////////////////////////
  printf("\n Your input number is : ");
  for (i = 0; i < no; i++)
    printf("%d\t ", heap[i]);
  //////////////////////////////////////////////////////////////////////////////////////
  for (i = 1; i < no; i++)
  {
    c = i;
    do
    {
      root = (c - 1) / 2;
      if (heap[root] < heap[c])   
      {
        temp = heap[root];
        heap[root] = heap[c];
        heap[c] = temp;
      }
      c = root;
    } while (c != 0);
  }
  printf("\n The makeHeap number is : ");
  for (i = 0; i < no; i++)
    printf("%d\t ", heap[i]);
  ////////////////////////////////////////////////////////////////////////////////////////
  for (j = no - 1; j >= 0; j--)
  {
    temp = heap[0];
    heap[0] = heap[j];    
    heap[j] = temp;
    root = 0;
    do
    {
      c = 2 * root + 1;    
      if ((heap[c] < heap[c + 1]) && c < j - 1)
        c++;
      if (heap[root] < heap[c] && c < j)   
      {
        temp = heap[root];
        heap[root] = heap[c];
        heap[c] = temp;
      }
      root = c;
    } while (c < j);
  }
  printf("\n The sorted number is : ");
  for (i = 0; i < no; i++)
    printf("%d\t", heap[i]);
  /////////////////////////////////////////////////////////////////////////////////////////
  printf("\n ");
  printf("\n ");
}
...