堆排序(2)
来源:互联网 发布:软件规格型号怎么写 编辑:程序博客网 时间:2024/04/29 02:00
#include<iostream>
#define ElementType int
#define length(array) sizeof(array)/sizeof(array[0])
using namespace std;
// 调整堆
void AdjustHeap(ElementType a[], int i, int len)
{
ElementType tmp = a[i];
for (int largest = 2 * i + 1; largest < len; largest = 2 * largest + 1)
{
if (largest != len - 1 && a[largest + 1]>a[largest])
++largest;
if (a[largest] > tmp)
{
a[i] = a[largest];
i = largest;
}
else
break;
}
a[i] = tmp;
}
// 建堆
void BuildMaxHeap(ElementType a[], int len) // 建一个堆
{
// i=len/2-1 是因为数组元素的下标从0开始,画个草图很容易明白
for (int i = len / 2 - 1; i >= 0; i--)
AdjustHeap(a, i, len);
}
// 堆排序
void HeapSort(ElementType a[], int n)
{
BuildMaxHeap(a, n);
for (int i = n - 1; i > 0; --i)
{
a[0] = a[0] ^ a[i];
a[i] = a[0] ^ a[i];
a[0] = a[0] ^ a[i];
AdjustHeap(a, 0, i);
}
}
void Print(int *array, int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
}
int main()
{
int array[] = { 23, 65, 12, 3, 8, 76, 345, 90, 21, 75, 34, 61 };
int len = length(array);
HeapSort(array, len);
Print(array, len);
system("pause");
return 0;
}
0 0
- 堆排序(2)
- 堆(堆排序)
- 算法(2)堆排序
- 排序算法(2)-堆排序
- 排序(堆排序)
- 二叉堆(堆排序)
- 堆排序(最小堆)
- (二叉堆,堆排序)
- 堆排序(最大堆)
- 堆排序(最大堆)
- 堆排序(最大堆)
- (2)排序之堆排序
- 排序(之堆排序)
- 排序(6)堆排序
- 排序(三) 堆排序
- 排序(四):堆排序
- hdu1106 排序(堆排序)
- 排序(5)---堆排序
- IDEA 使用(一)
- 数据结构实验之排序二:交换排序
- DB2错误代码大全
- java学习11天-自定义异常&异常转换(实例应用)
- 强连通分量
- 堆排序(2)
- Android:OpenGL笔记
- MySql、SqlServer、Oracle数据库行转列大全
- 日记: CreateProcess D7 to XE , Access Violation kernel32.dll
- 单元测试之JUnit4
- Google官方关于Android架构中MVP模式的示例
- 程序员常用的自助建站资源汇总!
- angularjs 弹出框 $modal
- 引用于指针的区别(java如何寻址)