Java堆排序算法
来源:互联网 发布:如何制作淘宝宝贝长图 编辑:程序博客网 时间:2024/06/14 12:53
package Practice;
//堆排序算法public class smartheapsort {
public static void main(String[] args) {
int[] a={5,7,2,6,8,9,3,1,4};
System.out.println("刚开始的元素!!!");
for (int j = 0; j < a.length; j++) {
System.out.print(a[j]);
}
System.out.println();
System.out.println("堆排序之后");
int n=a.length;
//从(n-1)/2开始,往i=0比较
for (int i = (n-1)/2; i >=0; i--)
//建立初始堆
HeapSort(a,n,i);
//输出堆排序之后的值
PrintHeap(a);
//从堆顶开始删除元素
delete(a);
}
public static void HeapSort(int [] a,int n,int k ){
int temp=0;
int k1=2*k+1;//左子树的节点
int k2=2*k+2;//右子树的节点
if(k1>a.length&&k2>a.length)//如果左右子树的节点都大于a.length,则结束
return;
int a1=Integer.MAX_VALUE;//定义两个变量,来保存左右子树
int a2=Integer.MAX_VALUE;
if(k1<n) a1=a[k1];//a1和a2分别代表左右字树的值
if(k2<n) a2=a[k2];
if(a[k]<a1&&a[k]<a2)//如果当前节点的值比它的子树节点的值都小,即堆排序成功,return到HeapSort(a,n,i);
return;
//如果存在子节点的值比父节点的值小,则交换
if(a1<a2){
temp=a[k];
a[k]=a[k1];
a[k1]=temp;
HeapSort(a,n,k1);//这里继续调用HeapSort方法是为了避免堆中交换元素后,堆中局部元素不满足小根堆的要求
}
else{
temp=a[k];
a[k]=a[k2];
a[k2]=temp;
HeapSort(a,n,k2);//这里继续调用HeapSort方法是为了避免堆中交换元素后,堆中局部元素不满足小根堆的要求
}
}
public static void PrintHeap(int[] a){
for (int s = 0; s < a.length; s++) {
System.out.print(a[s]);
}
System.out.println();
}
public static void delete(int[] a){
System.out.println("删除堆顶元素!!!");
int n=a.length;
while(n>0){
System.out.print(a[0]);//输出堆顶元素
a[0]=a[n-1];//最后一个元素移动到堆顶
n--;
HeapSort(a,n,0);
}
}
}
阅读全文
0 0
- Java堆排序算法
- Java 堆排序算法
- Java堆排序算法
- Java排序算法 堆排序
- Java排序算法:堆排序
- java排序算法 堆排序
- Java排序算法 堆排序
- 堆排序算法-java实现
- Java实现堆排序算法
- Java实现堆排序算法
- 堆排序算法java实现
- java算法之堆排序
- 堆排序算法--Java实现
- 堆排序算法(java版)
- 堆排序算法java实现
- Java排序算法(三):堆排序
- java排序算法之堆排序
- java排序算法_013堆排序(Heapsort)
- 数据结构链表下
- sever层Timestamp转标准日期/String转Integer
- 查看本地SOCKS端口
- saltstack grains
- 深入浅出 Python Descriptors / Properties
- Java堆排序算法
- flume1.6.0 linux 安装与监控
- MongoDB数据库设计中6条重要的经验法则
- 解决Let’s Encrypt SSL证书配置错误
- 智能指针
- Java
- 关于程序崩溃的问题总结【经验】
- POJ 1287Networking (kruskal)
- Arduino 开发入门 学习笔记 Arduino编程基础