博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++STL之堆排序算法
阅读量:7090 次
发布时间:2019-06-28

本文共 1835 字,大约阅读时间需要 6 分钟。

hot3.png

/**************************优先队列的实现选择:			链表(表头插入为O(N),删除时遍历O(N))或者让表插入时保持排序			二叉树(删除和插入都是O(logN))	可以达到NlogN 的时间复杂度的排序,就是使用二叉堆实现使用的排序算法就是堆排序使用一个附加数组,存储空间增加一倍  (或者将删除的最小数放入堆的最后) //??因为只会复制一次,时间复杂度并不会显著增加														//??***************************/// heapSort.h////#pragma once#include "stdafx.h"#include 
using namespace std;int leftChild(int hole)  //查找节点的左子树{ return hole*2 + 1;}// 最小值堆template 
void percolateMinDown(int hole, vector
& vec) // vec为原数组,hole为当前要排序的堆的空穴{ int child; T temp = vec[hole]; for (; leftChild(hole)< vec.size(); hole = child)  { child = leftChild(hole); //chlid为hole的左子树,child+1为hole的右子树 if (leftChild(hole) != vec.size() && vec[child+1] < vec[child])   //注意数组访问不要越界 { child ++;   //取左子树和右子树中的最小值 } if ( temp > vec[child])   //如果左子树和右子树中的最小值仍然比要空穴的值小,则其将最小值移到当前空穴 { vec[hole] = vec[child]; } else  //如果左子树和右子树中的最小值仍然比要空穴的值大,则当前空穴就是其最终位置 break; } vec[hole] = temp;}template 
void heapMinSort(vector
& vec){//  vector
 tempVector(vec.size()+1);//  for (int i = 0; i < vec.size(); i++)//  {//  tempVector[i] = vec[i];   //这里并没有用到附加数组//  } int hole = vec.size()/2; for (; hole >= 0; hole--) // 从大到小依次计算空穴的值 { percolateMinDown(hole,vec); } }// 最大值堆template 
void percolateMaxDown(int hole, vector
& vec){ int child; T temp = vec[hole]; for (;leftChild(hole) < vec.size(); hole = child) { child = leftChild(hole); if ( leftChild(hole) != vec.size() && vec[child] < vec[child+1]) //大根堆中取两个子树的较大者 { child++; } if (temp < vec[child]) //将左子树和右子树中的较大者移入空穴 { vec[hole] =  vec[child]; } else break; } vec[hole] = temp;}template 
void heapMaxSort(vector
& vec){ int hole = vec.size()/2; for (; hole >= 0; hole--) // 从大到小依次计算空穴的值 { percolateMaxDown(hole,vec); } }

转载于:https://my.oschina.net/u/1782374/blog/368241

你可能感兴趣的文章
asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API访问
查看>>
QTP使用心得
查看>>
uva1388 Graveyard
查看>>
JS 页面跳转
查看>>
JS调用android逻辑方法
查看>>
由3D touch所想到的那些。
查看>>
C# 类&结构体&枚举
查看>>
js/jq ajax+数组。个人整理
查看>>
CentOS7永久挂载硬盘
查看>>
从源码总结struts2命名空间的匹配规则
查看>>
如何看财报-转
查看>>
简介Doxygen(转载)
查看>>
jQuery性能优化指南
查看>>
android 四大组件
查看>>
android 上下边框线
查看>>
编译Hadoop1.1.2eclipse插件并测试
查看>>
有限状态自动机
查看>>
js点击修改按钮后修改
查看>>
c# 利用MailKit.IMap 收取163邮件
查看>>
Oracle之SQL函数
查看>>