堆排序
来源:互联网 发布:为什么mac不能玩lol 编辑:程序博客网 时间:2024/05/20 15:57
#include<iostream>using namespace std;//堆的插入--大根堆(用来建初堆)void MaxHeapFixup(int a[], int i){int temp;int j;temp=a[i];j=(i-1)/2;//j为父节点while(j>=0&&i!=0)//给i找到位置{if(a[j]>temp)// > 是插入大根堆 < 是插入小根堆break;a[i]=a[j];i=j;j=(i-1)/2;}a[i]=temp;}int main(){int a[]={48,62,35,77,55,14,35,98};int len=sizeof(a)/sizeof(a[0]);//建大根堆for(int i=0;i<len;i++){MaxHeapFixup(a,i);}for(int i=0;i<len;i++){cout<<a[i]<<" ";}cout<<endl;system("pause");return 0;}
以下为另外一种建立小根堆的过程,还有排序的过程:
#include<iostream>using namespace std;//从i节点开始调整,n为节点总数 父节点i的子节点为 2*i+1, 2*i+2//插入是从子节点往上找,而这个是从父节点往下找void MinHeapFixdown(int a[], int i, int n){ int j, temp;temp = a[i];//父节点j = 2 * i + 1;//子结点的左结点while (j < n){if(j+1<n&&a[j+1]<a[j]) //在左右孩子中找最小的j++;if(a[j]>=temp)break;a[i]=a[j]; //把较小的子结点往上移动,替换它的父结点i=j;j=2*i+1;}a[i]=temp;}//建立最小堆void MakeMinHeap(int a[], int n){for (int i = n / 2 - 1; i >= 0; i--)MinHeapFixdown(a, i, n);}void MinheapsortTodescendarray(int a[], int n){int t;for (int i = n - 1; i >= 1; i--){t=a[i];a[i]=a[0];a[0]=t;MinHeapFixdown(a, 0, i);//因为小根堆,所以 a[0] 一定是堆内最小的 //所以每次将a[0]与a[i],即最后一个数就是最小的了 //然后将 a[0]...a[i-1]重新建堆 //小根堆得到从大到小的排序}}int main(){int a[]={48,62,35,77,55,14,35,98};int len=sizeof(a)/sizeof(a[0]); cout<<"原始数:"<<endl;for(int i=0;i<len;i++){cout<<a[i]<<" ";}cout<<endl;cout<<"小根堆:"<<endl;MakeMinHeap(a,len);for(int i=0;i<len;i++){cout<<a[i]<<" ";}cout<<endl;cout<<"堆排序后:"<<endl;MinheapsortTodescendarray(a,len);for(int i=0;i<len;i++){cout<<a[i]<<" ";}cout<<endl;system("pause");return 0;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- RSA算法之实现篇
- Android Studio 里搭建自动化测试框架Robotium
- 在LINUX平台上手动创建多个实例(oracle11g)
- 关于内核中export_symbols()用后warning修改。
- 背包问题(动态优化)
- 堆排序
- 【OpenGL】详解第一个OpenGL程序
- Android JNI和NDK有什么区别
- Linux内核学习9:多线程程序设计
- 数据挖掘领域顶级会议期刊及其分析
- Spring MVC 下以JSON格式向后抬传数据
- hdu1710 Binary Tree Traversals
- A definition for the symbol '<symbolName>' could not be located
- SAP 后台数据表记录删除的三种方法