算法导论堆排序java实现
来源:互联网 发布:医院预约管理系统php 编辑:程序博客网 时间:2024/05/01 20:19
/**
*
* @author maobufan
* 算法导论第六章堆排序 *
*/
public class Mergelist {
private static int k,m;
private int []A;
//heapsize<=A.length;代表堆的大小,建最大堆时,heapsize==A.length.,但是在最后一步heapsort排序中,由于“分离”出最大元素,堆中元素相应“减少”,此时heapsize是小于数组大小的
private int heapSize;
public Mergelist(int []A){
this.A=A;
this.heapSize=A.length;
}
public static int[] initlist(int [][]temp,int []list){
for(int j=0;j<temp.length;j++){
list[j]=temp[j][0];
}
return list;
}
public static void printlist(int []list){
for(int i=0;i<list.length;i++){
System.out.print(" "+list[i]);
}
}
//保持堆的性质
public void maxHeap(int i){
int l=2*i,r=2*i+1,largest;
if(heapSize<0){
return;
}
if(l<heapSize&&A[l]>A[i]){
largest=l;
}else {
largest=i;
}
if(r<heapSize&&A[r]>A[largest]){
largest=r;
}
//如果恰好largest就是i或者larget>heapsize,程序不往下进行
if(largest==i||largest>heapSize){
return;
}
int temp=A[i];
A[i]=A[largest];
A[largest]=temp;
//递归调用
maxHeap(largest);
}
//建堆
public void buildMaxHeap(){
for(int i=A.length/2;i>=0;i--){
maxHeap(i);
}
}
//堆排序
public void heapSort(){
for(int i=A.length-1;i>=1;i--)
{
//排好序的最大堆最大元素与第一个元素互换位置,再对剩下的元素建堆
int tmp=A[i];
A[i]=A[0];
A[0]=tmp;
//关键,将堆中元素减小,然后只需对剩下的元素建成最大堆
heapSize--;
maxHeap(0);
}
}
//返回A中最大元素
public int maxNum(int []A){
return A[0];
}
public static void main(String [] args){
k=8;
int [][]temp={{23,35,39,44},{55,66,77,88},{15,20,26,30},
{19,20,16,20},{69,40,56,10},{39,30,66,0},{99,30,66,0},{3,30,66,0}};
int []list=new int[k];
list=initlist(temp,list);
Mergelist m=new Mergelist(list);
m.buildMaxHeap();
m.heapSort();
printlist(list);
}
}
打印结果:
- 算法导论堆排序Java实现
- 《算法导论的Java实现》 堆排序
- 算法导论堆排序java实现
- 【算法导论】堆排序java实现
- 【算法导论】堆排序实现
- 算法导论堆排序实现
- 《算法导论的Java实现》 7 堆排序
- java实现堆排序,思路参照算法导论
- 【算法导论】c++实现堆排序
- 堆排序__算法导论实现
- 堆排序C语言实现 算法导论
- 算法导论C语言实现: 堆排序
- 算法导论 堆排序 C语言实现
- 算法导论,堆排序,c实现。
- 算法导论堆排序python实现
- 算法导论—堆排序C++实现
- 堆排序(算法导论实现)
- 算法导论 堆排序
- memset()函数的应用
- A*算法(转)
- SWF 文件不能访问本地资源
- 利用Robot Framework和Python wrapper of Android uiautomator的Android测试自动化
- Windows应用程序高级控件之ImageList
- 算法导论堆排序java实现
- VS2010 无法打开包括文件:“iostream.h”: No such file or directory
- 清除浮动
- FIREFOX和CHROME浏览器下PercentLoaded()不能使用的解决方案
- windows中修改catalina.sh上传到linux执行报错This file is needed to run this program
- Qt5.3里使用X264库将y4m文件进行压缩
- MSOCache文件夹能否删除?
- jquery获取checkbox 的值
- C++中字符串输入