zoukankan      html  css  js  c++  java
  • Java算法-堆排序

    package org.rut.util.algorithm.support;
    
    import org.rut.util.algorithm.SortUtil;
    
    
    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;
                }
            }
    
        }
    
    }
    
    
    
    SortUtil:
    
    package org.rut.util.algorithm;
    
    import org.rut.util.algorithm.support.BubbleSort;
    import org.rut.util.algorithm.support.HeapSort;
    import org.rut.util.algorithm.support.ImprovedMergeSort;
    import org.rut.util.algorithm.support.ImprovedQuickSort;
    import org.rut.util.algorithm.support.InsertSort;
    import org.rut.util.algorithm.support.MergeSort;
    import org.rut.util.algorithm.support.QuickSort;
    import org.rut.util.algorithm.support.SelectionSort;
    import org.rut.util.algorithm.support.ShellSort;
    
    
    public class SortUtil {
        public final static int INSERT = 1;
        public final static int BUBBLE = 2;
        public final static int SELECTION = 3;
        public final static int SHELL = 4;
        public final static int QUICK = 5;
        public final static int IMPROVED_QUICK = 6;
        public final static int MERGE = 7;
        public final static int IMPROVED_MERGE = 8;
        public final static int HEAP = 9;
    
        public static void sort(int[] data) {
            sort(data, IMPROVED_QUICK);
        }
        private static String[] name={
                "insert", "bubble", "selection", "shell", "quick", "improved_quick", "merge", "improved_merge", "heap"
        };
        
        private static Sort[] impl=new Sort[]{
                new InsertSort(),
                new BubbleSort(),
                new SelectionSort(),
                new ShellSort(),
                new QuickSort(),
                new ImprovedQuickSort(),
                new MergeSort(),
                new ImprovedMergeSort(),
                new HeapSort()
        };
    
        public static String toString(int algorithm){
            return name[algorithm-1];
        }
        
        public static void sort(int[] data, int algorithm) {
            impl[algorithm-1].sort(data);
        }
    
        public static interface Sort {
            public void sort(int[] data);
        }
    
        public static void swap(int[] data, int i, int j) {
            int temp = data<i>;
            data<i> = data[j];
            data[j] = temp;
        }
    }
  • 相关阅读:
    python编写爬虫脚本并实现APScheduler调度
    python实践设计模式(一)概述和工厂模式
    90、java ftp 读取文件
    91、mysql批量删除表
    92、kkfile打印当前页
    CSS3实践之路(四):文本特效
    CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
    CSS3实践之路(二):盒子模型(box Model)和边框(border)
    CSS3实践之路(三):颜色(Color)和背景(Backgroud)
    谈谈javascript中的定时器
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4437650.html
Copyright © 2011-2022 走看看