با عرض سلا م وخسته نباشی خدمت شما دوست عزیز.
ببینید من برنامه شما رو دیدم ولی انگار شما مقصودتون رو از نوشتن یک maxHeap نمی دونید. maxHeap درختیه که از اون تو مرتب سازی از نوع HeapSort استفاده می کنند. بنابر این هنگام حذف یک عنصر تنها باید از ریشه حذف کرد و سپس دوباره درخت رو مرتب کرد (نه اینکه هر عنصر رو از هر کجا دلمون خواست حذف کنیم). من استراتژی شما رو تو متد max_heapfy دقیق متوجه نشدم ولی برای درج یک عنصر توی maxHeap ابتدا باید اون رو به آخرین عنصر آرایه اضافه کرد (برای اینکه ساختار درخت به صورت دودویی کامل بماند) و سپس درخت رو مرتب کرد. یعنی عنصر جدید به سمت جایگاه اصلی اش تو دخت به بالا حرکت می کنه و در صورت لزوم جاش رو با پدرش عوض می کنه . من این کار رو تو تابع عمل درج تو این درخت انجام دادم و برات نوشتم؛ امیدوارم بدردت بخوره.
void maxHeapInsert(int nodes[], int n, int x)
{
int i = n+1; // n+1 is location in end of tree
int j = i/2; // i div 2 ** j is index of i's parrent
while((j>0) && (nodes[j]<x((
// j>0 that is dosent arrive to root
// nodes[j]<x that is x is larger than its parent
}
nodes[i] = nodes[j]; //replace parent in child
i = j;
j = i/2; // j is parent of i
{
nodes[i] = x; // i is right location of x
{
اگه خواستی الگوریتم حذفش هم برات می نویسم.





پاسخ با نقل قول
