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

Java堆排序算法

2018-03-11 15:19 253 查看
今天看算法导论,翻了一下堆排序,重新复习了一下,用Java完整清晰的写了一遍。
public class Dsort {

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array=new int[] {5,3,17,10,84,19,6,22,9};
heapsort(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}

public static void swap(int[] array, int a,int b) {
int temp;
temp=array[a];
array[a]=array[b];
array[b]=temp;
}

public static void max_heapify(int[] a,int mark,int heapsize) {
int largest;
int l=2*mark+1,r=2*mark+2;
if (l<heapsize&&a[l]>a[mark]) {
largest=l;
}
else {
largest=mark;
}
if (r<heapsize&&a[r]>a[largest]) {
largest=r;
}
if (largest!=mark) {
swap(a, mark, largest);
max_heapify(a, largest,heapsize);
}
}

public static void build_maxheap(int[] a) {
for (int i = a.length/2-1; i >= 0; i--) {
max_heapify(a,i,a.length);
}
}

public static void heapsort(int[] a) {
build_maxheap(a);
int heapsize=a.length;
for (int i = a.length-1; i>0; i--) {
swap(a,0,i);
heapsize=heapsize-1;
max_heapify(a, 0, heapsize);
}
}

}
堆排序主要分为两步:1.建立初始堆(build_maxheap)2.调整堆(heapsort)。而其中很核心的一个函数就是max_heapify这个函数,两个关键步骤都要使用它来进行数据交换。我这里的算法实现的是大顶堆,给出了一个测试的例子。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  heapsort