堆排序-c++实现,节点变动则递归子树调整状态
来源:互联网 发布:中国联合网络通信市分 编辑:程序博客网 时间:2024/06/01 09:06
伪代码在算法导论,其他不多说
#include "stdafx.h"#include <iostream>using namespace std;#define i_max_size sizeof(iArrList)/sizeof(iArrList[0])//构建大根堆void BuildMaxHeap(int iArrList[] ,int iArrSize,int index){//原数组,大小,节点编号int iLeftIndex = 2*index + 1;//数组下标从0开始int iRightIndex = 2*index + 2;int largest = index;if((iRightIndex < iArrSize) ){//在建立大根堆时,如果父节点比两个子节点都小,则交换最大的一个子节点if((iArrList[iLeftIndex] < iArrList[iRightIndex])){largest = iRightIndex;}else{largest = iLeftIndex;}}else{if(iLeftIndex < iArrSize){largest = iLeftIndex;}}if((iArrList[index] < iArrList[largest]) && (largest != index)){iArrList[index] ^= iArrList[largest];iArrList[largest] ^= iArrList[index];iArrList[index] ^= iArrList[largest];//如果交换了某个节点的值,则需要递归交换其子树的节点BuildMaxHeap(iArrList,iArrSize,largest);}}void HeapSort(int iArrList[],int iArrSize){if(iArrSize < 0){return ;}for(int i=0;i<iArrSize;i++){for(int j = ((iArrSize - i)/2-1);j>=0;j--){//从最后一个孩子的父节点开始BuildMaxHeap(iArrList,iArrSize - i,j);}int tmp = iArrList[0];iArrList[0] = iArrList[iArrSize -1 - i];iArrList[iArrSize -1 - i] = tmp;/*iArrList[0] ^= iArrList[iArrSize -1 - i];iArrList[iArrSize -1 - i] ^= iArrList[0];iArrList[0] ^= iArrList[iArrSize -1 - i];*/for(int i=0;i<iArrSize;i++){cout<<iArrList[i]<<" ";}cout<<endl;}return ;}int main(){int iArrList [] ={16,14,10,8,7,9,3,2,4,1};HeapSort(iArrList,i_max_size);return 0;}
- 堆排序-c++实现,节点变动则递归子树调整状态
- 算法导论:堆排序递归实现 (c语言)
- 算法导论:堆排序非递归实现(c语言)
- 堆排序(非递归版)-- c语言实现
- 堆排序的实现(递归)
- 非递归实现堆排序
- 堆与堆排序--递归与非递归java实现
- Java递归实现的堆排序
- 堆排序的非递归实现
- 大顶堆第二弹----堆排序(递归实现)
- 调整堆以及堆排序
- 堆排序的递归实现以及非递归实现
- 堆排序的C实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序--C语言实现
- 一步一步学android之控件篇——ListView自定义显示数据格式
- 如何提高团队协作的效率
- susu linux修改root密码
- 数据库慢 redo log小的问题增加日志组增大redo 大小
- SSH 端口转发
- 堆排序-c++实现,节点变动则递归子树调整状态
- SQL知识点总结
- MAC系统安装/卸载cocos2d-x 2.1.4
- 最小生成树(普利姆算法、克鲁斯卡尔算法)
- 看看传说5亿行代码的Healthcare.gov网站的架构20131111
- 【润乾】V5动态统计图如何设计不同的柱子颜色
- HALCON基础知识
- ListView
- Java集合总结