package com.cy.util;
public class SortUtil {
public static <E extends Comparable<? super E>> void heapSort(E[] objects) {
int length = objects.length;
int pos = length/2-1;
//将原数组转换成一个堆
for(;pos>=0;pos--) {
down(objects, pos, length);
}
//将堆顶元素移至数组末,后将剩余最大元素上虑
for (int i = length-1; i > 0; i--) {
E tmp = objects[i];
objects[i] = objects[0];
objects[0] = tmp;
down(objects, 0, i);
}
}
private static int leftChild(int pos) {
return pos*2+1;
}
//将节点元素下沉
private static <E extends Comparable<? super E>> void down(E[] objects,int pos,int length) {
int child = pos;
E tmp = objects[pos];
for(child = leftChild(child);child<length;pos=child,child=leftChild(child)) {
if(child+1<length && objects[child].compareTo(objects[child+1])<0)
child++;
if(tmp.compareTo(objects[child])<0)
objects[pos]=objects[child];
else {
break;
}
}
objects[pos] = tmp;
}
}
堆排序的实现
最新推荐文章于 2024-07-14 22:24:20 发布