堆排序
来源:互联网 发布:拼图游戏源码 编辑:程序博客网 时间:2024/06/04 19:49
public class MaxHeap {
//调整堆,使根节点保持大堆的性质
public void maxHeap(int[]A,int i,int heapsize){
int l=2*i;//左孩子下标
int r=2*i+1;//右孩子
int largest=-1;
if(l<heapsize&&A[l]>A[i])
largest=l;
else {
largest = i;
}
if(r<heapsize&&A[r]>A[largest])
largest=r;
if (largest!=i) {
int temp=A[i];
A[i]=A[largest];
A[largest]=temp;
maxHeap(A, largest,heapsize);
}
return ;
}
//建堆
public int[] buildHeap(int []A)
{
int n=A.length;
for(int i=n/2;i>=0;i--)
{
maxHeap(A, i,n);
}
return A;
}
//堆排序
public void heapSort(int[] A)
{
buildHeap(A);
int n=A.length;
int heapsize=n;
for(int i=n-1;i>=1;i--)
{
int temp1=A[0];//交换头尾,将最大元素保存在尾部
A[0]=A[i];
A[i]=temp1;
heapsize--;//尾定位前移
maxHeap(A, 0, heapsize);
}
}
public static void main(String[] args) {
int []A={1,2,3,4,5,6,7};
MaxHeap mh=new MaxHeap();
mh.heapSort(A);
for(int i:A)
System.out.print(i+" ");
}
}
//调整堆,使根节点保持大堆的性质
public void maxHeap(int[]A,int i,int heapsize){
int l=2*i;//左孩子下标
int r=2*i+1;//右孩子
int largest=-1;
if(l<heapsize&&A[l]>A[i])
largest=l;
else {
largest = i;
}
if(r<heapsize&&A[r]>A[largest])
largest=r;
if (largest!=i) {
int temp=A[i];
A[i]=A[largest];
A[largest]=temp;
maxHeap(A, largest,heapsize);
}
return ;
}
//建堆
public int[] buildHeap(int []A)
{
int n=A.length;
for(int i=n/2;i>=0;i--)
{
maxHeap(A, i,n);
}
return A;
}
//堆排序
public void heapSort(int[] A)
{
buildHeap(A);
int n=A.length;
int heapsize=n;
for(int i=n-1;i>=1;i--)
{
int temp1=A[0];//交换头尾,将最大元素保存在尾部
A[0]=A[i];
A[i]=temp1;
heapsize--;//尾定位前移
maxHeap(A, 0, heapsize);
}
}
public static void main(String[] args) {
int []A={1,2,3,4,5,6,7};
MaxHeap mh=new MaxHeap();
mh.heapSort(A);
for(int i:A)
System.out.print(i+" ");
}
}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- js中indexof
- seajs+easyui实战
- Android性能优化典范
- Eclipse调试技巧
- 淘宝内部分享:怎么跳出MySQL的10个大坑
- 堆排序
- Android TextView文本文字修改实例
- Android高斯模糊制作启动界面
- 101 个 MySQL 的调节和优化的提示 --mysql优化
- 我的态度
- Java多线程同步总结之synchronized
- VS2010运行DirectShow的错误—typedef void * POINTER_64 PVOID64
- Ubuntu14.04无法识别Android设备解决方法
- 程序员代码面试常用算法汇总!