C算法--堆排序
来源:互联网 发布:数据库服务器部署 编辑:程序博客网 时间:2024/05/18 02:55
每天学点算法<img alt="奋斗" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/struggle.gif" />
堆排序算法是完全二叉树的形式,通过调整树节点上的值得位置,既不断地把最大的值调到根节点上,从最下的一个树开始,比较给个小二叉树的值,最终把最大的值调整到根节点上, 排序过程是:把根节点既a[0](最大值),末节点a[i-1]交换数值,排除i-1,继续递归,一直到剩下最后一个节点,排序完成。用别人的图示:
<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; line-height: 27px;"><span style="white-space:pre"></span>建立初始的堆结构如图:</span>
<img src="http://img.blog.csdn.net/20151225141211926?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 25.2px;">然后,交换堆顶的元素和最后一个元素,此时最后一个位置作为有序区(有序区显示为黄色),然后进行其他无序区的堆调整,重新得到大顶堆后,交换堆顶和倒数第二个元素的位置……</span>
<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 25.2px;"><img src="http://img.blog.csdn.net/20151225141410116?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span>
<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 25.2px;">大致就是这个意思吧,学习了,感谢博主们的无私奉献。</span>
#include "stdafx.h"#include <iostream>using namespace std;void HeapAdjust(int *a, int i, int size){int left = 2 * i + 1;int right = 2 * i + 2;int max = i;if (i <= size){if (left<size&&a[left]>a[max]){max = left;}if (right<size&&a[right]>a[max]){max = right;}if (max != i){swap(a[i], a[max]);HeapAdjust(a, max, size);cout << " " << a[i] << endl;}}}void HeapSort(int a[], int n){for (int i = n / 2 - 1; i >= 0; --i){HeapAdjust(a, i, n);}//排序 将最大的放后面for (int i = n - 1; i > 0; i--){swap(a[i], a[0]);cout << a[i] << endl;HeapAdjust(a, 0, i);}}
/************************************************************************* @Author : Yan Gan* @ Date :2015 /12/25* @ Email : * function: 算法集合************************************************************************/#include "stdafx.h"#include <iostream>using namespace std;void HeapSort(int a[],int n);int main(){int a[] = {60,70,12,40,8,30,10};cout << " " << sizeof(a) / sizeof(a[0]) << endl;//添加排序算法HeapSort(a, sizeof(a)/sizeof(a[0]));for (int i = 0; i<sizeof(a) / sizeof(a[0]);i++){cout << " " << a[i];}return 0;}
0 0
- 【c++】堆排序算法
- C算法--堆排序
- 排序算法 - 堆排序 (C++)
- 算法 - 堆排序(C#)
- 堆排序算法(C语言)
- 排序算法c语言描述---堆排序
- 排序算法(C实现)--------- 堆排序
- 排序算法系列----堆排序(C++)
- 《C算法》——堆排序
- 堆排序算法实现(C++)
- 堆排序算法(C & Java 实现)
- 堆排序算法的C语言版本
- 堆排序算法(c语言)
- 算法导论 之 堆排序[C语言]
- c语言 实现堆排序算法
- 堆排序C语言实现 算法导论
- C语言算法系列:堆排序
- 算法导论C语言实现: 堆排序
- PHP+MySQL的操作
- UIGestureRecognizer手势识别详解
- List接口、ArrayList类和LinkedList类 笔记
- IOS 的 7 中手势的介绍 和详细使用(UIGestureRecognizer) UIScreenEdgePanGestureRecognizer
- centos6.4安装mysql5.5
- C算法--堆排序
- CFileDialog类无故崩溃的解决及原因分析
- Hive远程模式安装
- 如何快速正确的安装 Ruby, Rails 运行环境
- 数据结构课程设计-学生信息管理系统
- 浏览器通过下载来下载文件
- filter 过滤器用户登录并判断是否属于电脑端或者手机端访问
- UVa 802 - Lead or Gold
- 目标检测的图像特征提取之(一)HOG特征