您的位置:首页 > 其它

heapsort的一个简单的例子

2008-09-30 23:47 288 查看
一个简单的关于heapsort的例子,前段时间自己离职了,有了一些空闲的时间,把书上的一些伪算法用C++改写一下.

供大家参考. 

#include <iostream>

//shiftp_down algorithm
void shift_down(int numbers[], int root, int bottom)
{
 int maxchild,temp;
 int 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;                //保证while循环找到最到的值
  }
  else
   done = 1;
 }
}

//shift_up algorithm
//void shift_up(int numbers[], int root, int bottom)
//{
// int maxchild,temp;
// int 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;
// }
//}

void heapsort( int numbers[],int array_size )
{
 int m_temp = array_size/2 ;
 std::cout<<numbers[m_temp]<<std::endl;
 for( int i=m_temp; i>=0; i--)
 {
  shift_down(numbers, i, array_size); 
 }
 int temp;
 for( int m_i= array_size-1; m_i>=0;m_i--)
 {
  temp = numbers[0];
  numbers[0] = numbers[m_i];
  numbers[m_i] = temp;
  shift_down(numbers, 0, m_i-1);
 }
}

//void heap_sort( int numbers[],int array_size )
//{
// int m_temp = array_size/2 ;
//
// for( int i=m_temp;i>=0;i-- )
// {
//  shift_up(numbers, i, array_size); 
// }
//
// int temp;
// for( int m_i= array_size-1; m_i>=0;m_i--)
// {
//  temp = numbers[0];
//  numbers[0] = numbers[m_i];
//  numbers[m_i] = temp;
//  shift_up(numbers, 0, m_i-1);
// }
//}

void main()
{
 const int array_size =11;
 int arr[array_size] ={15,45,21,10,8,98,35,57,14,30,84};
 //for (int i = 0; i < array_size; ++i)
 // arr[i] = i;

 heapsort( arr,array_size);

 for (int i = 0; i < array_size; ++i)
  std::cout<<arr[i]<<" ";
 std::cout<<std::endl;

 //for (int i = 0; i < array_size; ++i)
 // std::cout<<arr[i]<<" ";
 //std::cout<<std::endl;

}

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numbers up 算法 c