算法导论 习题6.2-5 用迭代法实现堆排序
来源:互联网 发布:淘宝个人交易信息买卖 编辑:程序博客网 时间:2024/05/16 16:08
#include <iostream>
using namespace std;
void swap(int array[] , int i , int j)
{
array[i] = array[i]+array[j];
array[j] = array[i]-array[j];
array[i] = array[i]-array[j];
}
void MaxHeapify(int array[] , int i , int hSize)
{
int l = 2*i;
int r = 2*i+1;
int largest;
while(l <= hSize)
{
if(array[l] > array[i])
{
largest = l;
}
else
{
largest = i;
}
if(r<=hSize && array[r]>array[largest]) //It's r<=hSize other than r<hSize.
{
largest = r;
}
if(largest != i)
{
swap(array , i ,largest);
i = largest;
l = 2*i;
r = 2*i+1;
}
else
{
break;
}
}
}
void BuildMaxHeap(int array[] , int hSize)
{
for(int i=hSize/2 ; i>=1 ; i--)
{
MaxHeapify(array , i , hSize);
}
}
void HeapSort(int array[] , int length)
{
int hSize = length;
BuildMaxHeap(array , hSize);
for(int i=length ; i>=2 ; i--)
{
swap(array , 1 , i);
hSize--;
MaxHeapify(array , 1 , hSize);
}
}
int main()
{
int a[99];
for(int i=1 ; i<99 ; i++)
{
a[i] = rand()%100;
}
HeapSort(a,99);
for(int i=1 ; i<99 ; i++)
{
cout << a[i] << ' ';
}
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rockerman_shane/archive/2011/02/15/6185506.aspx
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 算法导论 堆排序习题
- 算法导论习题6-堆排序
- 【算法导论】堆排序实现
- 算法导论堆排序实现
- 《算法导论》 - 第6章 - 堆排序 - 习题解答
- 【算法导论】c++实现堆排序
- 堆排序__算法导论实现
- 算法导论堆排序Java实现
- 堆排序C语言实现 算法导论
- 算法导论C语言实现: 堆排序
- 《算法导论的Java实现》 堆排序
- 算法导论 堆排序 C语言实现
- 算法导论堆排序java实现
- 算法导论,堆排序,c实现。
- 算法导论堆排序python实现
- 算法导论—堆排序C++实现
- 单链表逆置
- Groovy的集合类型
- uuid 做主键 spring +ibatis 查询异常
- 算法导论 第七章快速排序与随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 解决win7中右击管理打不开问题
- 发牌区代码-已经完成
- Understand each field of AWR [ID 884046.1]
- 法语键盘的使用方法
- 调用dll动态库时,函数类型不匹配,可能的解决方案!
- elipse中新建tld标签库描述符文件
- 值类型和引用类型的区别
- 程序设计C++使大家容易陷入重复劳动