Heap Sort: как исправить мою кодировку и реализовать мою логику?

для ввода массива 2 5 8 3 4 6 я получаю 2 4 5 3 8 6 я пытаюсь реализовать сортировку кучей, и я новичок, и я не знаю, какая ошибка возникает здесь, и я просто пытаюсь реализовать логику сортировки кучи, просто создав кучу и заменив последний элемент самым большим первым элементом индекса и тем самым уменьшив размер массива.

  #include<stdio.h>
  #include<conio.h>

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

  heapify(int *a,int i,int no)
  {

      int largest = i;
      int left = 2*i;
      int right = 2*i+1;
      if(left<=no && a[left]>largest)
      {
        largest=left;
      }

      if(right<=no && a[right]>largest)
      {
          largest=right;
      }

      if(largest!=i)
      {
          int temp=a[largest];      
          a[largest]=a[i];
          a[i]=temp;
          heapify(a,largest,no);
      }
  }

сортировать элементы в массиве и

  heapsort(int *a,int no)
  {
      while(no>1)
      {
          int temp=a[1];
          a[1]=a[no];
          a[no]=temp;
          --no;
          heapify(a,1,no);
      }
  }

распечатать элементы в массиве

  printarr(int *a,int no)
  {
      int i=1;

      for(;i<=no;i++)
          printf("%d",a[i]);      
  }

это основная функция.

  int main()
  {
      int i,j,k,no,size;

      printf("Enter the no of elements");
      scanf("%d",&no);
      int a[no+1];
      size=no;

      for(i=1;i<=no;i++)
      {
        scanf("%d",&a[i]);
      }

      printarr(a,no);
      j=no/2;

      for(i=j;i>0;--i)
      {
        heapify(a,i,no);
      }

      heapsort(a,no);
      printarr(a,no);

      getch();

      return 0;
  }

person Sam    schedule 19.08.2014    source источник
comment
Сейчас самое время научиться пользоваться отладчиком. Если у вас нет отладчика, есть много вариантов, или вы можете просто использовать стратегический метод отладки printf.   -  person Paul R    schedule 19.08.2014
comment
спасибо, что остаетесь со мной @PaulR   -  person Sam    schedule 09.10.2014


Ответы (1)


Вы сравниваете индекс со значением массива в функции heapify

 if(left<=no && a[left]>largest)

а также

if(right<=no && a[right]>largest)

Это должно быть

 if(left<=no && a[left]>a[largest])

а также

if(right<=no && a[right]>a[largest])
person Nullpointer    schedule 19.08.2014