排序(5)——堆排序
2016-09-10 13:44
85 查看
“test.cpp”
<strong><span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<assert.h>
void HeapAdjust(int* arr,int parent,size_t size)
{
assert(arr);
int child = 2*parent+1;
while(child && child < size)
{
if((child+1 < size) && (arr[child+1] > arr[child]))
{
++child;
}
if(arr[parent] < arr[child])
{
swap(arr[parent],arr[child]);
}
parent = child;
child = 2*parent+1;
}
}
void test()
{
int arr[] = {5,3,9,2,7,1,8,0,4,6};
size_t size = sizeof(arr)/sizeof(arr[0]);
//先建立一个大顶堆
for(int i = (size-2)/2;i >= 0;i--)
{
HeapAdjust(arr,i,size);
}
for(int i = 0;i < size;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
//把根节点的值和最后一个节点的值进行交换,在从根节点开始向下调整
for(int i = size-1;i >= 0;i--)
{
swap(arr[0],arr[i]);
HeapAdjust(arr,0,i);
}
for(int i = 0;i < size;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main()
{
test();
system("pause");
return 0;
}</span></strong>
<strong><span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<assert.h>
void HeapAdjust(int* arr,int parent,size_t size)
{
assert(arr);
int child = 2*parent+1;
while(child && child < size)
{
if((child+1 < size) && (arr[child+1] > arr[child]))
{
++child;
}
if(arr[parent] < arr[child])
{
swap(arr[parent],arr[child]);
}
parent = child;
child = 2*parent+1;
}
}
void test()
{
int arr[] = {5,3,9,2,7,1,8,0,4,6};
size_t size = sizeof(arr)/sizeof(arr[0]);
//先建立一个大顶堆
for(int i = (size-2)/2;i >= 0;i--)
{
HeapAdjust(arr,i,size);
}
for(int i = 0;i < size;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
//把根节点的值和最后一个节点的值进行交换,在从根节点开始向下调整
for(int i = size-1;i >= 0;i--)
{
swap(arr[0],arr[i]);
HeapAdjust(arr,0,i);
}
for(int i = 0;i < size;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main()
{
test();
system("pause");
return 0;
}</span></strong>
相关文章推荐
- 经典排序之堆排序
- 排序(六)-堆排序
- 第十六周项目5—选择排序之堆排序
- 七种排序(直接插入、折半插入、希尔、起泡、快速、简单选择、堆排序)
- C语言基本数据结构之五(折半插入,堆排序,冒泡排序,快速排序,并归排序)
- 数据结构上机实验-希尔排序,快速排序,堆排序
- 面试--算法排序(5)(堆排序)
- 排序算法(一):插入排序与堆排序
- 无聊写排序之 ---- 堆排序(HeadSort)
- 算法和数据结构---排序---堆排序
- C语言:数组排序(插入排序、选择排序、泡排序、谢尔排序、快速排序、堆排序)
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 排序——堆排序
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 阿布学排序之堆排序
- c# 自定义排序类(冒泡、选择、插入、希尔、快速、归并、堆排序等)
- Java排序:冒泡排序、快速排序、堆排序
- 七大排序之堆排序
- 算法铺子之排序---堆排序(一)
- 最近在写的赫夫曼树、B树、二项堆等都会用到堆排序,所以把最大堆排序和最小堆排序一次性先给大家看看