堆排序原理图解
来源:互联网 发布:淘宝卖家店名怎么改 编辑:程序博客网 时间:2024/05/01 11:56
数据结构中的堆和操作系统中的堆、堆栈(栈)是没有关系的,大家不要像我一样有误解。
数据结构中的堆分两种:大(顶)堆和小(顶)堆,简单来说就是
〇 。
O O O O
。 。 。 。 (大堆) 〇 〇 〇 〇(小堆)这个意思。
一般用二叉树来描述这种数据结构,存储可以用数组。
下面是排序思路:
(图):
C++代码:
- #include <iostream>
- #include <algorithm>
- using std::cout;
- using std::cin;
- using std::endl;
- template<class T>
- class Out{
- public:
- void operator()(T o)
- {
- cout<<o<<'\t';
- }
- };
- template<class T>
- void Swap(T& a,T&b)
- {
- T t=a;
- a=b;
- b=t;
- }
- inline int Rt(int idx)
- {
- return (idx<<1)+2;
- }
- inline int Lt(int idx)
- {
- return (idx<<1)+1;
- }
- template<class T>
- void HeapBuild(T* A,int idx,int size)
- {
- int child;
- for(;idx<=size/2;idx=child)
- {
- child=Lt(idx);
- if (child<size&&A[child]>A[idx])
- {
- Swap(A[idx],A[child]);
- }
- child=Rt(idx);
- if (child<size&&A[child]>A[idx])
- {
- Swap(A[idx],A[child]);
- }
- }
- }
- template<class T>
- void HeapSort(T* A,int size)
- {
- for (int i=size/2;i>=0;i--)
- {
- HeapBuild(A,i,size);
- }
- for (int i=size-1;i>=0;i--)
- {
- Swap(A[0],A[i]);
- HeapBuild(A,0,i);
- }
- }
- int main()
- {
- int size=0;
- cout<<"enter elements count num:"<<endl;
- cin>>size;
- int* elems = new int[size];
- cout<<"Input all elements to be sort:"<<endl;
- for(int i=0;i<size;cin>>elems[i++]);
- HeapSort(elems,size);
- std::for_each(elems,elems+size,Out<int>());
- delete []elems;
- }
0 0
- 堆排序原理图解
- 堆排序原理图解
- 堆排序原理图解
- 图解堆排序
- 图解堆排序
- 小学生图解排序算法:⑦堆排序
- 堆排序算法原理
- 最大堆-插入/删除/排序-图解
- 堆排序——深入浅出(图解)
- 堆排序 原理与实现
- 堆排序原理及代码
- 堆排序原理以及实现
- 堆排序原理及实现
- 堆排序原理及实现
- C/C++堆排序原理
- 排序算法原理、图解、代码实现
- 堆排序 图解 (网上摘抄)(方便查询)
- 图解"数据结构--内部排序算法"----选择排序:直接选择排序、堆排序
- UVALive 3177 长城守卫(贪心+二分)
- 传输List数据到jtable中
- Android基础&进阶
- ZOJ-2480
- ARM Cortex M4 SVC指令作用
- 堆排序原理图解
- 矩形切割
- 编译器和解释器。
- cc2530 串口实验--控制led灯
- java枚举类型
- 自己写一个安卓手机软件计算煮饭时间
- Preface
- Android 数据存储SQLite(ResultActivity)
- 信号强度