堆排序

来源:互联网 发布:unity3d 安卓包调试 编辑:程序博客网 时间:2024/05/22 21:00
介绍太麻烦了-.-!直接上代码...

package sort;public class HeapSort {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint a[] = {4,1,3,2,16,9,10,14,8,7};for(int i = 0; i < a.length; i ++){System.out.print(a[i] + ".");}HeapSort h = new HeapSort();h.HEAPSORT(a);System.out.println();for(int i = 0; i < a.length; i ++){System.out.print(a[i] + ".");}}public int parent(int i){  //父节点return (i - 1)/2;}public int left(int i){  //左孩子return i * 2 + 1;}public int right(int i){  //右孩子return i * 2 + 2;}public void swap(int a[], int i, int j){int temp;temp = a[i];a[i] = a[j];a[j] = temp;}public void MAX_HEAPIFY(int a[], int i, int heapsize){ //最大堆调整int l = left(i);int r = right(i);int largest;if(l < heapsize && a[l] > a[i])largest = l;else largest = i;if(r < heapsize && a[r] > a[largest])largest = r;if(largest != i){swap(a, i, largest);MAX_HEAPIFY(a, largest, heapsize);}}public void BUILD_MAX_HEAP(int a[], int heapsize){ //建最大堆for(int i = a.length / 2 - 1; i >= 0; i --)MAX_HEAPIFY(a, i, heapsize);}public void HEAPSORT(int a[]){  //堆排序int heapsize = a.length ;BUILD_MAX_HEAP(a, heapsize);for(int i = a.length - 1; i >= 1; i --){swap(a, 0, i);heapsize --;MAX_HEAPIFY(a, 0, heapsize);}}}


0 0