堆排序
2015-12-06 11:08
162 查看
排序过程:将未排序的数组看成是一个完全二叉树,依次从右到左,从下到上,对字树根节点和左右子节点进行
比较,挑选出最大的(或者最小的)一个 数放到根节点,调整完成之后,得到最大的(或者最小
的)数位于总根节点,然后再将其与最后一个数交换,继续前一个过程,最终得到一个 排好序的数组
时间复杂度: 平均 O(nlogn) 最好O(nlogn) 最坏O(nlognn) 不稳定
代码下载:
http://download.csdn.net/detail/hbdatouerzi/9330395
比较,挑选出最大的(或者最小的)一个 数放到根节点,调整完成之后,得到最大的(或者最小
的)数位于总根节点,然后再将其与最后一个数交换,继续前一个过程,最终得到一个 排好序的数组
public void sorting() { for(int i=array.length;i>0;i--){ this.buildingHeap(i); this.exchange(i-1, 0); } } private void buildingHeap(int n){ for(int i=n/2;i>0;i--){ adjustHeap(i-1,n); } } private void adjustHeap(int n,int length){ int temp; int left=2*n+1; int right=2*n+2; if(right<=length-1){//左右子数都有 if(array[left]>array &&array[left]>array[right]){ exchange(n,left); }else if(array[right]>array &&array[right]>array[left]){ exchange(n,right); } }else if(right>(length-1)&&left<=(length-1)){//只有左子树,没有右子树 if(array[left]>array ){ exchange(n,left); } } } private void exchange(int m,int n){ int temp; temp=array[m]; array[m]=array ; array =temp; }
时间复杂度: 平均 O(nlogn) 最好O(nlogn) 最坏O(nlognn) 不稳定
代码下载:
http://download.csdn.net/detail/hbdatouerzi/9330395
相关文章推荐
- curl命令详解
- 优先队列 两个堆的维护
- 理解Golang包导入
- 1054. The Dominant Color (20)
- win7不能正常启动,只能进入安全模式
- nc命令使用详解
- 1053. Path of Equal Weight (30)
- 工作中用到的小算法,计算两日期间隔xx年xx月xx天
- 1052. Linked List Sorting (25)
- mac上对CentOS6.5安装VNC流程
- ThinkPHP框架八验证码和用户的验证
- 原码, 反码, 补码 详解
- 抽象类与接口的区别
- 【Leetcode】Contains Duplicate II
- 【C语言提高28】多级指针
- 我与Github
- Mac之Git/GitHub使用(2)——Create A Repo
- 【linux】进程间的通信简介(c语言编程)
- 如何去理解马克思主义和哲学的含义
- TranslateMessage和DispatchMessage作用