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;
}
供大家参考.
#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;
}
相关文章推荐
- 一个简单的堆排序(heapsort)
- 一个简单的JSF例子
- Jena的简单理解和一个例子
- 一个简单的演示SQL2005的查询通知的例子
- 中级JavaScript例子, 如何实现一个简单实用的模板套用机制, GXTemplate , 第3章(估计要写9章)
- 一个简单的例子先
- 一个简单的SqlServerCe + Entity Framework 5 Code First + MVC4 + Ajax例子(上)
- 关于AJAX一个简单的例子
- 本文简单讲诉jQuery处理json与ajax返回的Json的一个例子
- 一个简单的Android Library Project例子
- 一个简单的Java UDP协议通信的例子
- 一个简单的oracle函数返回数组的例子[zz]
- 一个简单的Spring的AOP的例子
- SQL 游标 一个简单的例子
- cocos2dx 3.4 lua学习一个简单的小例子
- WCF走你~一个简单的例子,根据用户ID,从用户模块(用户服务器)获得实体
- C# Remoting的一个简单例子
- 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)
- iBATIS教程 (二)环境的安装和配置,以及一个简单的例子
- Android读写文件的一个简单入门的例子