您的位置:首页 > 编程语言 > Java开发

Java堆排序

2016-06-17 20:00 435 查看
1、小顶堆排序(降序堆排序)

import java.util.Arrays;
import java.util.Scanner;

public class Account{
public static void adjustMinHeap(int[]a,int pos,int len){//调整一个最小堆
int temp;//保存当前节点
int child;//保存子节点
for(temp=a[pos];2*pos+1<=len;pos=child){//pos依次等于儿子
child=2*pos+1;//儿子等于当前节点的2倍加1
if(child<len&&a[child]>a[child+1]){//child<len很关键或者写成child!=len同样可以。保证有右儿子,才可以比较
child++;//保证child保存的是大的儿子
}
if(a[child]<temp){//大的儿子与父亲比较
a[pos]=a[child];//当前pos位置放小的
}else{//表示不需要移动,直接break
break;
}
}
a[pos]=temp;//当前的节点放之前保存的a[pos]值
}
public static void minHeapSort(int[] a){
int i;
int len=a.length;
for(i=len/2-1;i>=0;i--){
adjustMinHeap(a,i,len-1);//从len/2-1到len-1调整为最小堆
}
for(i=len-1;i>=0;i--){
int temp=a[0];//不停的将堆顶的最小元素移到队尾!!!!最小值在最后,所以说小顶堆排序是降序的
a[0]=a[i];
a[i]=temp;
adjustMinHeap(a,0,i-1);//再调整调整后的堆为最小堆
}
}
public static void main(String [] args){
int [] a={2,1,3,5,6,4,8,7,9};
minHeapSort(a);
System.out.println(Arrays.toString(a));
}

}
输出:
[9, 8, 7, 6, 5, 4, 3, 2, 1]2、大顶堆排序(升序堆排序)就是将上面的算法中关键词取反义,大于小于号取反
import java.util.Arrays;
import java.util.Scanner;

public class Account{
public static void adjustMaxHeap(int[]a,int pos,int len){//调整一个大顶堆
int temp;//保存当前节点
int child;//保存子节点
for(temp=a[pos];2*pos+1<=len;pos=child){//pos依次等于儿子
child=2*pos+1;//儿子等于当前节点的2倍加1
if(child<len&&a[child]<a[child+1]){//child<len很关键或者写成child!=len同样可以。保证有右儿子,才可以比较
child++;//保证child保存的是小的儿子
}
if(a[child]>temp){//大的儿子与父亲比较
a[pos]=a[child];//当前pos位置放da的
}else{//表示不需要移动,直接break
break;
}
}
a[pos]=temp;//当前的节点放之前保存的a[pos]值
}
public static void minHeapSort(int[] a){
int i;
int len=a.length;
for(i=len/2-1;i>=0;i--){//i>=0,i=len/2-1不是很懂!!!!!!!!!!!!!!
adjustMaxHeap(a,i,len-1);//从len/2-1到len-1调整为最小堆!!!!!!!
}
for(i=len-1;i>0;i--){
int temp=a[0];//不停的将堆顶的最大元素移到队尾!!!!最大值在最后,所以说大顶堆排序是升序的
a[0]=a[i];
a[i]=temp;
adjustMaxHeap(a,0,i-1);//再调整调整后的堆为最大堆
}
}
public static void main(String [] args){
int [] a={2,1,3,5,6,4,8,7,9};
minHeapSort(a);
System.out.println(Arrays.toString(a));
}
}
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: