[Java] java 堆排序 →→→→→进入此内容的聊天室

来自 , 2020-01-15, 写在 Java, 查看 159 次.
URL http://www.code666.cn/view/8df707a9
  1. package org.rut.util.algorithm.support;
  2. import org.rut.util.algorithm.SortUtil;
  3. /**
  4.  * @author treeroot
  5.  * @since 2006-2-2
  6.  * @version 1.0
  7.  */
  8. public class HeapSort implements SortUtil.Sort{
  9.     /* (non-Javadoc)
  10.      * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
  11.      */
  12.     public void sort(int[] data) {
  13.         MaxHeap h=new MaxHeap();
  14.         h.init(data);
  15.         for(int i=0;i<data.length;i++)
  16.             h.remove();
  17.         System.arraycopy(h.queue,1,data,0,data.length);
  18.     }
  19.  
  20.      private static class MaxHeap{
  21.          
  22.        
  23.         void init(int[] data){
  24.             this.queue=new int[data.length+1];
  25.             for(int i=0;i<data.length;i++){
  26.                 queue[++size]=data[i];
  27.                 fixUp(size);
  28.             }
  29.         }
  30.          
  31.         private int size=0;
  32.         private int[] queue;
  33.                
  34.         public int get() {
  35.             return queue[1];
  36.         }
  37.         public void remove() {
  38.             SortUtil.swap(queue,1,size--);
  39.             fixDown(1);
  40.         }
  41.         //fixdown
  42.         private void fixDown(int k) {
  43.             int j;
  44.             while ((j = k << 1) <= size) {
  45.                 if (j < size && queue[j]<queue[j+1])
  46.                     j++;
  47.                 if (queue[k]>queue[j]) //不用交换
  48.                     break;
  49.                 SortUtil.swap(queue,j,k);
  50.                 k = j;
  51.             }
  52.         }
  53.         private void fixUp(int k) {
  54.             while (k > 1) {
  55.                 int j = k >> 1;
  56.                 if (queue[j]>queue[k])
  57.                     break;
  58.                 SortUtil.swap(queue,j,k);
  59.                 k = j;
  60.             }
  61.         }
  62.     }
  63. }

回复 "java 堆排序"

这儿你可以回复上面这条便签

captcha