堆排序: package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class HeapSort implements SortUtil.Sort{
/* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { MaxHeap h=new MaxHeap(); h.init(data); for(int i=0;i<data.length;i++) h.remove(); System.arraycopy(h.queue,1,data,0,data.length); }
private static class MaxHeap{ void init(int[] data){ this.queue=new int[data.length+1]; for(int i=0;i<data.length;i++){ queue[++size]=data[i]; fixUp(size); } } private int size=0;
private int[] queue; public int get() { return queue[1]; }
public void remove() { SortUtil.swap(queue,1,size--); fixDown(1); } //fixdown private void fixDown(int k) { int j; while ((j = k << 1) <= size) { if (j < size && queue[j]<queue[j+1]) j++; if (queue[k]>queue[j]) //不用交换 break; SortUtil.swap(queue,j,k); k = j; } } private void fixUp(int k) { while (k > 1) { int j = k >> 1; if (queue[j]>queue[k]) break; SortUtil.swap(queue,j,k); k = j; } }
}
}
|