0

مرتب سازی Heap

 
rezahashemian1374
rezahashemian1374
کاربر برنزی
تاریخ عضویت : مهر 1391 
تعداد پست ها : 254
محل سکونت : تهران

مرتب سازی Heap
پنج شنبه 18 مهر 1392  8:57 AM

#include <iostream.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>

void heapSort(int numbers[], int array_size);
void siftDown(int numbers[], int root, int bottom);
void main (void)
{
    const 
n = 10;
    
int X[n];

    
randomize();
    for (
int i=0; i<n; i++)
    {
        
X[i] = rand() % 100;
        
cout << X[i] << "\t";
    }

    
heapSort (X,n);

    
cout<< endl;
    for (
i=0; i<n; i++)
        
cout << X[i] << "\t";

    
getch();
}

void heapSort(int numbers[], int array_size)
{
  
int i, temp;

  for (
i = (array_size / 2)-1; i >= 0; i--)
    
siftDown(numbers, i, array_size);

  for (
i = array_size-1; i >= 1; i--)
  {
    
temp = numbers[0];
    
numbers[0] = numbers[i];
    
numbers[i] = temp;
    
siftDown(numbers, 0, i-1);
  }
}



void siftDown(int numbers[], int root, int bottom)
{
  
int done, maxChild, temp;

  
done = 0;
  while ((
root*2 <= bottom) && (!done))
  {
    if (
root*2 == bottom)
      
maxChild = root * 2;
    else if (
numbers[root * 2] > numbers[root * 2 + 1])
      
maxChild = root * 2;
    else
      
maxChild = root * 2 + 1;

    if (
numbers[root] < numbers[maxChild])
    {
      
temp = numbers[root];
      
numbers[root] = numbers[maxChild];
      
numbers[maxChild] = temp;
      
root = maxChild;
    }
    else
      
done = 1;
  }
} 

Seyyed.Reza.Hashemian@Gmail.Com

دوستانی که سوالی دارند یا مایل به تماس هستند می توانند از اطلاعات بالا استفاده نمایند.

اگر هم تایپکی زدید و احتیاج به پاسخگویی سریع داشتید اطلاع دهید

تشکرات از این پست
دسترسی سریع به انجمن ها